0

我希望能够将我的Session单例注入到我的 Ember 模型中。我试图支持的用例是在模型上具有响应用户配置文件的计算属性(会话对象上的属性)。

App = window.App = Ember.Application.create({
    ready: function() {
       console.log('App ready');
       this.register('session:current', App.Session, {singleton: true});
       this.inject('session:current','store','store:main');
       this.inject('controller','session','session:current');
       this.inject('model','session','session:current');
    }
});

注入在控制器中工作正常,但我无法将其放入model. 这里有什么限制吗?有什么特别的技巧吗?

-------- 附加上下文 ---------

model这是我希望在我的定义中能够做的一个例子:

App.Product = DS.Model.extend({
    name: DS.attr("string"),
    company: DS.attr("string"),
    categories: DS.attr("raw"),
    description: DS.attr("string"),

    isConfigured: function() {
        return this.session.currentUser.configuredProducts.contains(this.get('id'));
    }.property('id')
}); 
4

1 回答 1

11

默认情况下,模型中的注入不起作用。为此,您需要设置标志Ember.MODEL_FACTORY_INJECTIONS = true

Ember.MODEL_FACTORY_INJECTIONS = true;

App = window.App = Ember.Application.create({
    ready: function() {
       console.log('App ready');
       this.register('session:current', App.Session, {singleton: true});
       this.inject('session:current','store','store:main');
       this.inject('controller','session','session:current');
       this.inject('model','session','session:current');
    }
});

这样做的缺点是它会产生一些中断变化:

  • 如果你有App.Product.FIXTURES = [...]你需要使用App.Product.reopenClass({ FIXTURES: [...] });

  • productRecord.constructor === App.Product将评估为false。要解决此问题,您可以使用App.Product.detect(productRecord.constructor).

于 2013-11-15T16:13:12.240 回答