假设我有以下app.js
文件(目前未使用EAK,Ember 1.4.0
,Handlebars 1.3.0
,jQuery 2.1.0
),这些文件可设置不同的“Singleton”实例通过整个应用程序中的App.#name
访问(不只是Controllers
,Routes
或Views
,还有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'
我将无法获得整个应用程序命名空间,是吗?
答案 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。