简体   繁体   中英

How to use two different adapters at the same time in Ember.js application?

I'm using basic adapter for one API:

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

Lets say I need to retrieve some data from an other service but using REST API:

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

How to use store2 then? Or is there another approach to solve issue like this?

You can add two different adapters, no need to create multiple stores.

For Ember 2:

Model-specific adapters can be created by putting your adapter class in an app/adapters/ + model-name + .js file of the application.

Source: DS.Adapter Class

When you need to use a different Store, define your Store and then specify the Model you want to retrieve:

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);

hope it helps

This is how I made the above example work, note Im using ember-cli . Instead of creating my store with the DS.RESTAdapter.create() , or in my case, Im using DS.LSAdapter , I create my store in a initializer like this:

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

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

This basically registers a lsstore and a adapter:-ls on the container. Then I can inject my store into the application's route or controller , and this will try to find the adapter using adapter:-ls .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM