7

Adapter 和 Fixture Adapter 和 REST Adapter 有什么区别,什么时候使用它们?

4

1 回答 1

22

当您不(还?)关心与后端通信时使用DS.FixtureAdapter(或),但会将您的数据作为“夹具”存储在客户端中。DS.FixtureAdapter.create()声明模型后:

App.Thing = DS.Model.extend({
  name: DS.attr('string'),
  // ...
});

您可以定义您的固定装置:

App.Thing.FIXTURES = [
  {
    id: 1,
    name: '...',
    // ...
  },
  {
    id: 2,
    name: '...',
    // ...
  },
];

然后您可以在它们上使用 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'
  })
});

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

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

于 2012-08-11T04:41:05.333 回答