2013-01-31 149 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功能的任何建議,什麼可能錯在這裏

CHers

回答

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'),而是將事件發送到路由器,我們必須使用控制器中的目標屬性。例如this.get( 'controller.target')發送( 'deleteTodo')。我在這裏更新小提琴:http://jsfiddle.net/9Xasr/9/ – guleria

+0

當你發送一個事件給控制器時,它會冒泡到路由器。我更喜歡發送給控制器,以防它處理事件,如果我忽略它,那麼它會冒泡到路由器。 –

相關問題