在成员存储中动态选择成员适配器



是否可以在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

最新更新