是否可以在ember商店或Ember应用程序的其他地方动态选择适配器?我正在为我的ember应用程序实现离线行为,当离线时,应用程序应该利用离线适配器从浏览器存储中提取数据。
这个逻辑的最佳位置在哪里?
我知道DS.Store上有一个适配器属性,您可以在其中指定自定义适配器(http://emberjs.com/api/data/classes/DS.Store.html#property_defaultAdapter),但我无法使其工作。
示例:
应用程序/适配器/ custom.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Store.extend({
adapter: 'custom',
});
应用程序/ store.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Adapter.extend({
pathForType: function(type) {
debugger; //Never goes in here
},
});
我期待的是这样的事情:
export default DS.Store.extend({
offlineService: Ember.inject.service('offlineService') //Service to detect if app has network connection
adapter: function() {
if (this.get('offlineService.isOffline') {
return 'offlineAdapter'
} else {
return 'application'
}
}.property('offlineService.isOffline')
});
是否有可能沿着这些方向发展?
谢谢!
答案 0 :(得分:1)
今天最简单的方法是覆盖adapterFor
方法:
export default DS.Store.extend({
offlineService: Ember.inject.service('offlineService') //Service to detect if app has network connection
adapterFor(modelName) {
if (this.get('offlineService.isOffline') {
return this.offlineAdapterFor(modelName);
} else {
return this._super(modelName); // use default logic, i.e. adapters/<modelname> file
}
},
offlineAdapterFor(modelName) {
// your logic here ...
}
});
注意:这是一个私有API。无法保证这将在未来版本的Ember Data中继续有效。
文档: http://emberjs.com/api/data/classes/DS.Store.html#method_adapterFor