Ember.Instrumentation.subscribe:来自把手的触发事件

时间:2013-11-13 10:59:22

标签: ember.js

在我的视图的初始化中,我已按照以下方式设置事件监听:

 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>

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

1 个答案:

答案 0 :(得分:4)

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

当你在内部使用动作时,ember将使用Ember.ActionHandler#send方法来发送这些事件。因此,您可以重新打开该类,并代理该方法,将调用包装在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/

我希望它有所帮助