gpt4 book ai didi

ember.js - 将服务注入(inject) Ember 对象 [不是 Ember Controller ]

转载 作者:行者123 更新时间:2023-12-04 00:41:28 24 4
gpt4 key购买 nike

我正在尝试将 Ember 服务注入(inject)到 Ember 对象中,但不断收到以下错误:

"Assertion Failed: Attempting to lookup an injected property on an
object without a container, ensure that the object was instantiated
via a container."

我的代码基本上如下所示:
const Model = Ember.Object.extend({
store: Ember.inject.service(),

destroyRecord() {...},

serialize() {...},

deserialize() {...},
});

let newModel = Model.create();
newModel.get('store');

备注 :如果我将服务注入(inject) Controller 而不是对象,它确实有效。没有任何运气试图弄清楚如何使用 Ember 容器注册对象。

最佳答案

它适用于 Ember.Controller因为 Ember 控制着对象的生命周期。简而言之,当 Ember 需要某个 Controller 的实例时,它会向容器请求一个,容器将提供该实例,并在必要时进行初始化。

这意味着要使依赖注入(inject)起作用,您需要获取 Model 的新实例。通过容器。假设 Ember 2.3 因为 getOwner ,以及 this在 Ember 应用程序中的某处:

let owner = Ember.getOwner(this);
let newModel = owner.lookup('object:model');
newmodel.get('store');

您可以咨询 lookup documentation here .

但是怎么注册呢?使用应用初始化器:
$ ember generate initializer register-model

然后,打开生成的初始化程序,假设你的文件在 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
};

您可以咨询 register documentation here .

希望这有帮助!

关于ember.js - 将服务注入(inject) Ember 对象 [不是 Ember Controller ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com