Ember:挂进ActionHandler #send

时间:2015-10-29 13:51:56

标签: ember.js

我正试图通过挂钩this.send()按照以下方式在Ember中设置ActionHandler#send

Ember.ActionHandler.reopen({
  send() { console.log("hooked"); this._super(...arguments); }
}

当我从app.js拨打此电话时,应用程序正在启动时,它可以正常运行。当我从初始化程序中调用它时,它没有。当我在应用程序启动后调用它时,例如来自应用程序控制器,它也不起作用。在两种情况都不起作用的情况下,如果我追踪到this.send()调用,它会直接进入send的原始实现。

我怀疑这与在实例化对象时使用mixins的方式有关,但是否则我很难过。

1 个答案:

答案 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处理

Working demofull code behind it