1

在我的视图中,我设置了事件监听,如下所示:

 Ember.Instrumentation.subscribe("inlineEdit.makeBlue", {
    before: function (name, timestamp, payload) {
       alert(name, timestamp,payload);
    },
    after: function () {

    }
  });

从车把我想用一个动作触发事件:

<a {{action inlineEdit.makeBlue on="mouseDown"}} class="btn ">Blue</a>

不幸的是,这不会触发上述事件监听器。可以从车把触发仪表事件吗?如果是怎么办?

4

1 回答 1

4

目前在 ember 核心中不可用,但可以实现。

当您在内部使用操作时,ember 将使用该Ember.ActionHandler#send方法来调度这些事件。因此,您可以重新打开该类,并代理该方法,将调用包装在 a 中Ember.instrument

Ember.ActionHandler.reopen({
    send: function(actionName) {
        var orininalArguments = arguments, 
            args = [].slice.call(arguments, 1), 
            result;        
        Ember.instrument('action.' + actionName, args, function() {            
            result = this._super.apply(this, orininalArguments);
        }, this);        
        return result;
    }
});

所以你可以订阅:

// Specific action
Ember.Instrumentation.subscribe("action.inlineEdit.makeBlue", { ... })

action在订阅中添加了前缀,因此您可以利用检测 api,并通过以下方式监听所有操作事件:

// All actions
Ember.Instrumentation.subscribe("action", { ... })

看看那个小提琴看看这个工作http://jsfiddle.net/marciojunior/8P46f/

我希望它有帮助

于 2013-11-13T12:11:39.603 回答