是否可以在ember商店或ember应用程序中的其他地方的适配器之间进行动态选择?我正在为我的ember应用程序实现离线行为,离线时,应用程序应该利用离线适配器从浏览器存储中提取数据。
把这个逻辑放在哪里最好?
我知道DS.Store上有一个适配器属性,您可以在其中指定自定义适配器(http://emberjs.com/api/data/classes/DS.Store.html#property_defaultAdapter),但我一直没能让它发挥作用。
示例:
app/adapters/custom.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Store.extend({
adapter: 'custom',
});
app/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')
});
这样的事情有可能吗?
谢谢!
目前最简单的方法是覆盖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