【问题标题】:emberjs: how to trigger a custom event in a Viewemberjs:如何在视图中触发自定义事件
【发布时间】:2013-01-31 20:34:02
【问题描述】:

我想将原始事件(点击)转换为语义事件,例如“deleteTodo” 这描述了here,但没有描述如何实现:(
我有以下代码:

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 函数。有什么建议在这里可能会出错吗?

干杯

【问题讨论】:

    标签: events view ember.js router custom-events


    【解决方案1】:

    你可以使用 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/

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

    【讨论】:

    • 我无法让它工作,所以我在这里创建了一个 jsfiddle:jsfiddle.net/jeanluca/9Xasr/6 有什么建议吗?
    • 不是 this.get('controller').send('deleteTodo') 而是要将事件发送到路由器,我们必须使用控制器中的目标属性。例如this.get('controller.target').send('deleteTodo')。我在这里更新了小提琴:jsfiddle.net/9Xasr/9
    • 当您向控制器发送事件时,它会冒泡到路由器。我更喜欢发送到控制器以防它想要处理事件,如果我忽略它,它就会冒泡到路由器。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多