【问题标题】:Injecting function with initializer in ember-cli在 ember-cli 中使用初始化程序注入函数
【发布时间】:2014-07-21 02:33:17
【问题描述】:

我有一个基于 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 中的处理方式是否不同和/或上述代码中的某些内容不正确?或者它们是比使用初始化器更好的方法来实现我的目标吗?

【问题讨论】:

  • 不知道 ember-cli 是如何工作的......但是这里的应用程序是否在全球范围内可用?
  • ember-cli/es6 模块的目标之一是从全局命名空间中删除所有内容。 App 无法在全球范围内使用,因为您正在注册单个模块。

标签: ember.js ember-cli


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2015-07-26
  • 2014-12-03
  • 2014-10-12
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
相关资源
最近更新 更多