2013-01-31 2 views
0

나는 "deleteTodo" 이 here 설명처럼, 의미 론적 이벤트로 원시적 이벤트 (클릭)를 설정하고 싶지만, 구현하지 않는 방법 :(
을 뷰에서 사용자 지정 이벤트를 트리거하는 방법 나는 다음과 같은 코드가 있습니다 :emberjs :

App.TodoView = Em.View.extend({ 
    click: function(e) { 
     this.trigger("deleteTodo"); 
    } 
}); 

App.Router.map(function(match) { 
    match('/').to('index'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    deleteTodo: function(e) { 
     // this code is never executed :(
    } 
}) ; 

나는 내가 TodoView 클릭 함수가 호출되는 것을 볼 수 있지만, '클릭'을 IndexRoute에서하지 deleteTodo 기능 어떤 제안이 잘못 여기서 뭐 갈 수도

을 수행 한 후.?

키엘

답변

5

this.get ("controller"). send ("deleteTodo")를 사용할 수 있습니다. 컨트롤러가 deleteTodo를 처리하지 않으면 컨트롤러에 메시지를 보내고 라우터에 버블 링되고 처리됩니다. 라우터에서

click: function(e) { 
    this.get('controller').send("deleteTodo"); 
} 

당신은 또한 이벤트를 정의해야합니다 :

events: { 
    doStuff: function(e) { 
    alert("Do stuff") ;  
    } 
} 

http://jsfiddle.net/9Xasr/7/

내가 컨트롤러에서 기록 삭제를 할 일반적으로 것입니다. 라우터 이벤트에 넣는 것이 이상적이지는 않습니다.

+0

나는 그것을 얻을 수 없으므로 여기 jsfiddle를 만들었습니다 : http://jsfiddle.net/jeanluca/9Xasr/6/ 어떤 제안? –

+0

이 컨트롤러는 this.get ('controller'). send ('deleteTodo')가 아니고 라우터에 이벤트를 보내려면 컨트롤러의 target 속성을 사용해야합니다. 예 : this.get ('controller.target'). send ('deleteTodo'). 내가 여기 피들을 업데이 트했습니다 : http://jsfiddle.net/9Xasr/9/ – guleria

+0

당신이 컨트롤러에 이벤트를 보낼 때 그것은 라우터에 거품. 나는 컨트롤러에 이벤트를 처리하고자 할 경우에 보내기를 선호하며 무시한다면 라우터에 거품이 난다. –