如何在Ember.js应用程序中同时使用两个不同的适配器?

时间:2013-05-03 21:56:08

标签: javascript ember.js ember-data

我正在为一个API使用基本适配器:

App.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.BasicAdapter.create()
});

假设我需要从其他服务检索一些数据,但使用REST API:

App.Store2 = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.create()
});

如何使用store2呢?还是有另一种方法可以解决这样的问题吗?

3 个答案:

答案 0 :(得分:3)

您可以添加两个不同的适配器,无需创建多个商店。

对于Ember 2:

  

可以通过将适配器类放在应用程序的app / adapters / + model-name + .js文件中来创建特定于模型的适配器。

来源:DS.Adapter Class

答案 1 :(得分:2)

当您需要使用其他商店时,请定义商店,然后指定要检索的模型:

App.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.BasicAdapter.create()
});

App.store2 = DS.Store.create({
  revision: 12,
  adapter: DS.RESTAdapter.create()
});

// retrieving from custom store
var myModelObject = App.store2.find(App.MyDifferentModel, 1);

// retrieving from defaultStore is implicit for the Models defined
var post = App.Post.find(1);

希望有所帮助

答案 2 :(得分:0)

这是我使上述示例工作的方式,请注意我使用ember-cli。 不是使用DS.RESTAdapter.create()创建我的商店,或者在我的情况下,我使用DS.LSAdapter,我在这样的初始化程序中创建我的商店:

app.LsStore = DS.Store.extend({
  adapter: '-ls',
});

app.register('store:lsstore', app.LsStore);
app.register('adapter:-ls', DS.LSAdapter);

这基本上在容器上注册lsstoreadapter:-ls。然后我可以将我的商店注入应用程序的routecontroller,这将尝试使用adapter:-ls找到适配器。