gpt4 book ai didi

ember.js - Ember 应用程序套件 : How to deal with Application-wide Singleton instances?

转载 作者:行者123 更新时间:2023-12-02 22:07:50 25 4
gpt4 key购买 nike

假设我有以下 app.js 文件(当前未使用 EAK、Ember 1.4.0Handlebars 1.3.0jQuery 2.1.0),它设置了不同的“单例”实例,可以通过整个应用程序中的App.#name访问这些实例(不仅仅是 Controller ) >、RoutesViews 以及 Helpers、自定义 Utils 等等...),例如:

window.App = Ember.Application.create({});

App.CustomAjax = App.utils.ajax.CustomAjax.create({secHash: 'someSecurityHash'});
App.BrowserStateListener = App.utils.browser.BrowserStateListener.create();
App.UserManager = App.utils.user.CustomUserManager.create({user: App.utils.user.User.create({}), someOtherDependency: RAApp.utils.some.SomeOtherDependency.create({someValue: 'someValue'})});
....

...以及更多类似的内容。

我如何将其传输到 ES6 模块中,以便我可以在该应用程序中使用 EAK?我是否应该使用 Ember.Application.initializer 来实现此目的,以便我可以从 initialize 方法的 application 参数中引用应用程序,例如这个?

import Resolver from 'ember/resolver';
import CustomAjax from 'appkit/utils/ajax/custom-ajax';

var App = Ember.Application.extend({
LOG_ACTIVE_GENERATION: true,
LOG_MODULE_RESOLVER: true,
LOG_TRANSITIONS: true,
LOG_TRANSITIONS_INTERNAL: true,
LOG_VIEW_LOOKUPS: true,
modulePrefix: 'appkit', // TODO: loaded via config
Resolver: Resolver['default']
});

Ember.Application.initializer({
name: 'init1',

initialize: function (container, application) {
// set it like this?
application.CustomAjax = CustomAjax.create({secHash: 'someSecurityHash'});
}
});

export default App;

但是,我如何导入CustomAjax对象 - 或者我像这样设置的任何其他对象?如果我尝试从“appkit/app”导入应用程序,我将无法获得整个应用程序命名空间,对吗?

最佳答案

您应该考虑将这些对象作为所有 Ember 对象的依赖项注入(inject):

Ember.Application.initializer({
name: 'init1',

initialize: function (container, application) {
var customAjax = App.utils.ajax.CustomAjax.create({secHash: 'someSecurityHash'});
container.register('custom:ajax', customAjax);
// inject this object into all ember controllers
container.injection('controller', 'custom:ajax', 'customAjax');
}
}):

App.SomeController = Ember.ObjecctController.extend({
// this object will be injected upon instantiation
customAjax: null
}):

有一个presentation关于 Matt Beale 的 Ember 依赖注入(inject)。

此外,如果您需要在发送 ajax 请求之前对其进行修改,则可以使用 Ember.$.ajaxSetup Hook 。

关于ember.js - Ember 应用程序套件 : How to deal with Application-wide Singleton instances?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198640/

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