Ember:我如何注入视图?

时间:2014-02-20 04:39:58

标签: javascript view ember.js dependency-injection

假设我有一些可重复使用的东西:

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

1 个答案:

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