在ember-cli中使用初始化程序注入函数

Dun*_*ker 4 ember.js ember-cli

我有一个建立在Ember-cli上的应用程序.我试图在所有路由,控制器和视图中注入一个方法.我知道我可以利用该app/utils目录并将方法的模块导入到调用它的所有文件中,但我希望该方法可以自动使用.因此,我选择使用初始化程序注入方法.

初始化程序如下所示:

export default {
  name: 'injectMethod',

  initialize: function(container, app) {
    var someFunction = function(message) {

    };

    app.register('function:main', someFunction);

    Em.A(['route', 'controller', 'view']).forEach(function(place) {
      app.inject(place, 'someFunction', 'function:main');
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误消息:Uncaught TypeError: undefined is not a function.我删除该app.inject()行时错误消失.

初始化程序在ember-cli中处理方式不同和/或上述代码中的某些内容是否正确?或者,与使用初始化程序相比,它们是实现目标的更好方法吗?

Kin*_*n2k 11

Ember希望您注册一个可以使用该create方法创建实例的工厂.如果您传入一个实例(或只是一个方法),您需要告诉Ember不要尝试实例化它并只使用传入的实例.

export default {
  name: 'injectMethod',

  initialize: function(container, app) {
    var someFunction = function(message) {

    };

    app.register('function:main', someFunction, {instantiate: false});

    Em.A(['route', 'controller', 'view']).forEach(function(place) {
      app.inject(place, 'someFunction', 'function:main');
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

示例:http://emberjs.jsbin.com/xaboliwu/1/edit