2013-02-03 50 views
2

可能重複:
emberjs: how to trigger a custom event in a ViewEmberJs:自定義事件中的路由器沒有收到

我創建了一個的jsfiddle來證明這個問題。當你點擊視圖(在文本上)時,你將在控制檯中看到該視圖接收到點擊。

App.IndexView = Em.View.extend({ 
    click: function(e) { 
     console.log("CLICK"); 
     this.get("controller").send("doStuff"); 
} 
}); 

App.IndexRoute = Em.Route.extend({ 
    .... 
    doStuff: function(e) { 
     alert("Do stuff") ;  
    } 
}); 

這是一個完整的工作示例太http://jsfiddle.net/jeanluca/9Xasr/6/

任何建議:但是,當我創建一個自定義事件,並觸發它,它不是在路由器接收到的?

乾杯

回答

3

您呼叫的控制器爲App.IndexView的doStuff(),但你定義doStuff的路線內。你應該把它移動到App.IndexController

App.IndexController = Em.Controller.extend({ 
    doStuff: function(e) { 
     alert("Do stuff") ;  
    } 
}); 

小提琴:http://jsfiddle.net/8k4PE/

在另一方面,如果你想的路線接收事件:

<script type="text/x-handlebars" data-template-name="navigation"> 
    <span {{action "doStuff}}>Sidebar</span> 
</script> 

App.IndexRoute = Em.Route.extend({ 
    //... 
    events: { 
     doStuff: function(e) { 
     alert("Do stuff") ;  
     } 
    } 
}); 
+0

從文檔:這些語義事件發送到您的應用程序的路由器(請參閱介紹的意見),所以他們應該前往您的路由器,我會說! –

+0

@JeanlucaScaljeri但是'doStuff'不是一個事件處理函數。你只需從實際的事件處理程序中調用它(默認情況下是視圖中的'click'函數)。如果要將'doStuff'定義爲事件處理程序,請在目標元素上使用{{action「doStuff」}}'。 –

+0

@JeanlucaScaljeri編輯我的回答 –