Adapter和Fixture Adapter和REST Adapter有什么区别,以及何时使用每个?
答案 0 :(得分: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的自述文档。