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

时间:2014-07-21 02:33:17

标签: 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');
    });
  }
};

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

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

1 个答案:

答案 0 :(得分: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');
    });
  }
};

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