在ember-data中,适配器和Fixture适配器和REST适配器有什么区别?

lad*_*boo 7 ember.js ember-data

Adapter和Fixture Adapter和REST Adapter之间的区别是什么,以及何时使用每个?

dec*_*hov 22

使用DS.FixtureAdapter(或DS.FixtureAdapter.create())当你不(但?)关心与后端通信,但会将你的数据存储为客户端中的"固定装置".一旦你宣布了一个模型:

App.Thing = DS.Model.extend({
  name: DS.attr('string'),
  // ...
});
Run Code Online (Sandbox Code Playgroud)

你可以定义你的灯具:

App.Thing.FIXTURES = [
  {
    id: 1,
    name: '...',
    // ...
  },
  {
    id: 2,
    name: '...',
    // ...
  },
];
Run Code Online (Sandbox Code Playgroud)

然后你可以在它们上使用ember-data方法(例如App.Thing.findAll(),等等)并对它们进行操作,但当然它只会在页面存在的情况下持续存在(即javascript环境).

DS.RestAdapter虽然显然仍处于开发阶段,但可以使用,但它可以很好地适应Rails API,但可能会被修改/扩展以适用于您正在使用的任何RESTful API.它知道App.Thing.findAll()通过调用来处理/things,并App.Thing.find(12)通过调用来处理/things/12.这是一个相对路径,附加到您传入的命名空间参数:

App.store = DS.Store.create({
  revision: 4,
  adapter: DS.RestAdapter.create({
    namespace: 'http://what.ever/api/v1'
  })
});
Run Code Online (Sandbox Code Playgroud)

DS.Adapter是相当抽象的:上述内置适配器的超类.如果两者都不符合您的需求,您可能希望实现自己的需求:

App.adapter = DS.Adapter.create({
  find: function(store, type, id) {
    // ...
    jQuery.get( ... , function(data) {
      store.load(type, id, data);
    });
  },
  createRecord: function(store, type, model) {
    // ...
    jQuery.post( ... , function(data) {
      store.didCreateRecord(model, data);
    });
  },
  // ...
});
App.store = DS.Store.create({
  revision: 4,
  adapter: App.adapter
});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.有关详细信息,请参阅https://github.com/emberjs/data上的自述文档.