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