假设我有一些可重复使用的东西:
App.FooUtil = Ember.Object.extend({
foo: function () {
return "bar";
}
});
然后我这样注册:
App.register('util:fooUtil', App.FooUtil);
我尝试将其“注入”我的观点:
App.inject('view', 'fooUtil', 'util:fooUtil');
现在假设我有这个观点:
App.SuperView = Ember.View.extend({
contextMenu: function(evt) {
//This is ALWAYS undefined!
var fooUtil = this.get('fooUtil');
window.alert(fooUtil.foo());
event.preventDefault();
}
});
{{#view App.SuperView}}Right Click Me!{{/view}}
App.inject('views', 'fooUtil', 'util:fooUtil');
App.inject('view:index', 'fooUtil', 'util:fooUtil');
App.inject('view:topLevel', 'fooUtil', 'util:fooUtil');
App.inject('view:super', 'fooUtil', 'util:fooUtil');
答案 0 :(得分:2)
向所有控制器注入fooUtil
是否有缺点?然后你的代码看起来像这样:
App.SuperView = Ember.View.extend({
contextMenu: function(evt) {
var fooUtil = this.get('controller.fooUtil');
window.alert(fooUtil.foo());
event.preventDefault();
}
});
你在哪里注射?我通常在初始化器中进行。
Ember.Application.initializer({
name: 'fooUtil',
after: 'store',
initialize: function(container) {
container.injection('controller', 'fooUtil', 'util:fooUtil');
}
});