Events emberjs:如何在视图中触发自定义事件

Events emberjs:如何在视图中触发自定义事件,events,view,ember.js,router,custom-events,Events,View,Ember.js,Router,Custom Events,我想把一个基本事件(点击)变成一个语义事件,比如“deleteTodo” 这是描述的,但不是如何实现:( 我有以下代码: App.TodoView = Em.View.extend({ click: function(e) { this.trigger("deleteTodo"); } }); App.Router.map(function(match) { match('/').to('index'); }); App.IndexRoute = Em

我想把一个基本事件(点击)变成一个语义事件,比如“deleteTodo” 这是描述的,但不是如何实现:(
我有以下代码:

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 click函数,但没有调用IndexRoute中的deleteTodo函数。有什么建议吗

干杯

您可以使用这个。获取(“控制器”)。发送(“删除TODO”)。这将向控制器发送一条消息,如果控制器不处理删除TODO,它将冒泡到路由器并在那里处理

click: function(e) {
    this.get('controller').send("deleteTodo");
}
在路由器中,您还需要定义事件:

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

我通常会在控制器中删除记录。似乎将其放在路由器事件中并不理想。

您可以使用此选项。get(“controller”).send(“deleteTodo”)。这将向控制器发送消息,如果控制器不处理deleteTodo,它将冒泡到路由器并在那里处理

click: function(e) {
    this.get('controller').send("deleteTodo");
}
在路由器中,您还需要定义事件:

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


我通常会在控制器中删除记录。似乎将其放在路由器事件中并不理想。

我无法让它工作,所以我在这里创建了一个JSFIDLE:有什么建议吗?不是这个。get('controller')。send('deleteTodo'))但要将事件发送到路由器,我们必须使用控制器中的target属性。例如,this.get('controller.target')。send('deleteTodo'))。我在这里更新了fiddle:当您将事件发送到控制器时,它会将气泡发送到路由器。我更喜欢将事件发送到控制器,以防控制器想要处理该事件,如果我忽略它,它会将气泡发送到路由器。我无法让它工作,所以我在这里创建了一个JSFIDLE:有什么建议吗?不是这个。get('controller')。send('deleteTodo'))但要将事件发送到路由器,我们必须使用控制器中的target属性。例如,this.get('controller.target')。send('deleteTodo'))。我在这里更新了fiddle:当你向控制器发送事件时,它会冒泡到路由器。我更喜欢发送到控制器,以防它想要处理事件,如果我忽略它,它会冒泡到路由器。