我正试图通过挂钩this.send()
按照以下方式在Ember中设置ActionHandler#send
:
Ember.ActionHandler.reopen({
send() { console.log("hooked"); this._super(...arguments); }
}
当我从app.js
拨打此电话时,应用程序正在启动时,它可以正常运行。当我从初始化程序中调用它时,它没有。当我在应用程序启动后调用它时,例如来自应用程序控制器,它也不起作用。在两种情况都不起作用的情况下,如果我追踪到this.send()
调用,它会直接进入send
的原始实现。
我怀疑这与在实例化对象时使用mixins的方式有关,但是否则我很难过。
答案 0 :(得分:3)
使用初始化程序时它确实有效:
初始化/操作 - hook.js
import Ember from 'ember';
export function initialize() {
Ember.ActionHandler.reopen({
send() {
console.log("hooked");
this._super(...arguments);
}
});
}
export default {
name: 'action-hook',
initialize: initialize
};
在应用程序控制器中测试。
控制器/ application.js中
import Ember from 'ember';
export default Ember.Controller.extend({
afterInit: Ember.on('init', function() {
Ember.run.next(() => {
console.log('Send action.');
this.send('exampleAction');
});
}),
actions: {
exampleAction() {
console.log('exampleAction handled');
}
}
});
输出:
发送行动。
钩
exampleAction处理