在我的视图的初始化中,我已按照以下方式设置事件监听:
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>
不幸的是,这不会触发上面的事件监听器。可以从车把触发仪表活动吗?如果有,怎么样?
答案 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/
我希望它有所帮助