我正在尝试将一些全局应用程序配置(或状态或选项)注入到所有组件中,例如路由,控制器和数据适配器。 不知道为什么这段代码不会将依赖注入数据适配器。也许问题在于订购?
var App = Ember.Application.create({
LOG_TRANSITIONS: true,
LOG_VIEW_LOOKUPS: true
});
var RESTAdapter = DS.RESTAdapter.extend({
primaryKey: '_id',
buildURL: function() {
var locale = this.get('options.locale');
return locale + this._super.apply(this, arguments);
}
});
App.ApplicationStore = DS.Store.extend({
adapter: RESTAdapter
});
App.initializer({
name: 'options',
initialize: function(container, app) {
var o = Ember.Object.create();
o.set('default-locale', 'en');
app.register('globals:options', o, { instantiate: false, singleton: true });
}
});
App.initializer({
name: 'injectOptions',
before: 'options',
initialize: function(container, app) {
app.inject('controller', 'options', 'globals:options'); // OK
app.inject('route', 'options', 'globals:options'); // OK
app.inject('data-adapter', 'options', 'globals:options'); // not working
app.inject('dataAdapter', 'options', 'globals:options'); // not working
app.inject('adapter', 'options', 'globals:options'); // not working
app.inject('store', 'options', 'globals:options'); // ???
}
});
答案 0 :(得分:2)
注入是在创建时完成的,很可能商店和适配器可能只是在注入发生之前创建。只需将初始化程序设置为ember-data
之前。
App.initializer({
before:'ember-data',
name: 'options',
initialize: function(container, app) {
var o = Ember.Object.create();
o.set('default-locale', 'en');
app.register('globals:options', o, { instantiate: false, singleton: true });
}
});
App.initializer({
name: 'injectOptions',
before: 'options',
initialize: function(container, app) {
app.inject('controller', 'options', 'globals:options'); // OK
app.inject('route', 'options', 'globals:options'); // OK
app.inject('data-adapter', 'options', 'globals:options'); // not working
app.inject('dataAdapter', 'options', 'globals:options'); // not working
app.inject('adapter', 'options', 'globals:options'); // not working
app.inject('store', 'options', 'globals:options'); // ???
}
});
示例:http://emberjs.jsbin.com/OxIDiVU/1012/edit
另外声明商店是不推荐使用的模式。你应该声明适配器:
var RESTAdapter = DS.RESTAdapter.extend({
primaryKey: '_id',
buildURL: function() {
var locale = this.get('options.locale');
return locale + this._super.apply(this, arguments);
}
});
App.ApplicationAdapter = RESTAdapter;