Ember App Kit:如何处理应用程序范围的Singleton实例?

时间:2014-03-05 13:05:41

标签: ember.js ember-app-kit

假设我有以下app.js文件(目前未使用EAK,Ember 1.4.0Handlebars 1.3.0jQuery 2.1.0),这些文件可设置不同的“Singleton”实例通过整个应用程序中的App.#name访问(不只是ControllersRoutesViews,还有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-Modules中,以便我可以将EAK用于此应用程序?我是否应该将Ember.Application.initializer用于此目的,以便我可以使用application方法的initialize参数来引用该应用程序?

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;

但是,我如何import只有CustomAjax对象 - 或者我设置的任何其他对象?如果我尝试import App from 'appkit/app'我将无法获得整个应用程序命名空间,是吗?

1 个答案:

答案 0 :(得分:2)

您应该看一下将这些对象作为依赖项注入所有Ember对象:

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   
}):

Matt Beale对Ember依赖注入有presentation

此外,如果您需要在发送之前修改ajax请求,可以使用Ember。$。ajaxSetup hook。