Ember.js Ember.MODEL\u工厂注射的具体用途是什么?

Ember.js Ember.MODEL\u工厂注射的具体用途是什么?,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我使用的是Ember CLI,默认情况下,它似乎将Ember.MODEL\u FACTORY\u INJECTIONS=true在app.js中 我试着把这一行注释掉(并将其设置为false),然后我的应用程序似乎在某种严格的模式下运行。我得到了一堆失败的断言,因为我的一些模型关系没有显式地指定逆 这就是确切的错误: 您在(DS.Model的子类)上定义了“account”关系,但在(DS.Model的子类)上发现了多个类型可能的反向关系(DS.Model的子类)。看看http://emberj

我使用的是Ember CLI,默认情况下,它似乎将
Ember.MODEL\u FACTORY\u INJECTIONS=true
app.js

我试着把这一行注释掉(并将其设置为false),然后我的应用程序似乎在某种严格的模式下运行。我得到了一堆失败的断言,因为我的一些模型关系没有显式地指定逆

这就是确切的错误:

您在(DS.Model的子类)上定义了“account”关系,但在(DS.Model的子类)上发现了多个类型可能的反向关系(DS.Model的子类)。看看http://emberjs.com/guides/models/defining-models/#toc_explicit-反转,了解如何显式指定反转

使用默认的Ember CLI生成的应用程序,且
Ember.MODEL\u FACTORY\u INJECTIONS=true,我没有得到这些错误。所以我相信这个标志会以某种方式改变核心行为


请见识见识

DS.Model
,您的模型基类,只是由Ember数据定义的另一个类。为了使它具有依赖项注入等特殊功能,Ember需要挂接到该类中,以便在实例化它时,实例引用应用程序容器。当
Ember.MODEL\u FACTORY\u INJECTIONS
处于启用状态时,Ember将向类应用额外的混合,以便它可以

您可以使用获取实例的应用程序容器(或所有者)。例如,这就是如何查找应用程序或控制器实例的存储。直接调用
MyModelClass.create()
时,不会设置所有者。您需要使用
Ember.setOwner()
或使用现有所有者实例化它。看

然而,许多使用Ember数据的应用程序不直接实例化模型实例,也不需要这样做

您当前可以使用
Ember.MODEL\u FACTORY\u INJECTIONS=true
选择使用该功能,但我相信他们正在朝着在将来将其作为默认设置的方向发展


因此,关闭该功能会导致错误,因为某些混入未包含在模型类中。

感谢您的明确解释。2年后,但仍然相关!作为对你伟大安瓦尔的补充,你可以从余烬2.13开始移除这面旗帜。有关详细信息,请阅读:。
let owner = Ember.getOwner(this);

User.create(
  owner.ownerInjection(),
  { username: 'rwjblue' }
)