Ember.js 在ember cli中使用初始值设定项注入函数

Ember.js 在ember cli中使用初始值设定项注入函数,ember.js,ember-cli,Ember.js,Ember Cli,我有一个基于Ember cli的应用程序。我正在尝试将一个方法注入到所有路由、控制器和视图中。我知道我可以利用app/utils目录,将该方法的模块导入调用它的所有文件中,但我希望该方法自动可用。因此,我选择使用初始值设定项注入该方法 初始值设定项如下所示: export default { name: 'injectMethod', initialize: function(container, app) { var someFunction = function(messa

我有一个基于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');
    });
  }
};
这将导致以下错误消息:
uncaughttypeerror:undefined不是函数
。当我删除
app.inject()
行时,错误消失


在ember cli中是否对初始值设定项进行了不同的处理和/或上述代码中是否存在错误?或者它们比使用初始值设定项更好地实现我的目标吗?

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

示例:

donno ember cli如何工作..但应用程序是否在全球范围内可用?ember cli/es6模块的目标之一是从全局名称空间中删除所有内容<代码>应用程序无法在全球范围内使用,因为您正在注册单个模块。Perfect上也有一篇关于此的详细博客文章。谢谢,伙计们!