我正在尝试将Ember服务注入Ember对象,但不断收到以下错误:
"Assertion Failed: Attempting to lookup an injected property on an
object without a container, ensure that the object was instantiated
via a container."
Run Code Online (Sandbox Code Playgroud)
我的代码基本上类似于以下内容:
const Model = Ember.Object.extend({
store: Ember.inject.service(),
destroyRecord() {...},
serialize() {...},
deserialize() {...},
});
let newModel = Model.create();
newModel.get('store');
Run Code Online (Sandbox Code Playgroud)
注意:如果我将服务注入Controller而不是对象,它确实有效.没有任何运气试图找出如何使用Ember容器注册Object.
loc*_*cks 20
它适用于Ember.Controller因为Ember控制对象的生命周期.简而言之,当Ember需要某个控制器的实例时,它会向容器请求一个,容器将提供实例,必要时进行初始化.
这意味着要使依赖注入工作,您需要Model通过容器获取新的实例.假设Ember 2.3因为getOwner,而且它this在Ember应用程序中的某个地方:
let owner = Ember.getOwner(this);
let newModel = owner.lookup('object:model');
newmodel.get('store');
Run Code Online (Sandbox Code Playgroud)
但如何注册?使用应用程序初始化程序:
$ ember generate initializer register-model
Run Code Online (Sandbox Code Playgroud)
然后,打开生成的初始化程序,并假设您的文件位于app/folder/model.js,输入如下内容:
import Model from 'app-name/folder/model';
export function initialize(application) {
application.register('object:model', Model);
}
export default {
name: 'register-model',
initialize
};
Run Code Online (Sandbox Code Playgroud)
您可以在register此处查阅文档.
希望这有用!
| 归档时间: |
|
| 查看次数: |
5998 次 |
| 最近记录: |