如何使用 Ember RESTAdapter 使用 POST 动词更新或删除记录?默认情况下,它使用 PUT 或 DELETE 动词发送 json。在我工作的地方阻止使用这些动词发送。
我有点希望我可以做 Rails 的事情,你发送一个 POST 并使用额外的元信息告诉它是秘密 PUT 还是 DELETE。
我正在通过 RESTAdapter 使用 Ember 1.0.0 和 ember-data 1.0.0beta2。
如何使用 Ember RESTAdapter 使用 POST 动词更新或删除记录?默认情况下,它使用 PUT 或 DELETE 动词发送 json。在我工作的地方阻止使用这些动词发送。
我有点希望我可以做 Rails 的事情,你发送一个 POST 并使用额外的元信息告诉它是秘密 PUT 还是 DELETE。
我正在通过 RESTAdapter 使用 Ember 1.0.0 和 ember-data 1.0.0beta2。
我认为覆盖DS.RESTAdapter
updateRecord
anddeleteRecord
可以工作:
DS.RESTAdapter.reopen({
updateRecord: function(store, type, record) {
var data = {};
var serializer = store.serializerFor(type.typeKey);
serializer.serializeIntoHash(data, type, record);
var id = Ember.get(record, 'id');
return this.ajax(this.buildURL(type.typeKey, id), "POST", { data: data });
},
deleteRecord: function(store, type, record) {
var id = Ember.get(record, 'id');
return this.ajax(this.buildURL(type.typeKey, id), "POST");
}
});
您可以覆盖 RESTAdapter 上的 ajaxOptions:
DS.RESTAdapter.reopen({
ajaxOptions: function(url, type, hash) {
hash = hash || {};
if (type === 'PUT' || type === 'DELETE') {
hash.data = hash.data || {};
hash.data['_method'] = type;
type = 'POST';
}
return this._super(url, type, hash);
}
});
这是Ember 2.7.3和Ember Data 2.7.0的语法
export default DS.RESTAdapter.extend({
updateRecord: function(store, type, snapshot) {
let id = snapshot.id;
let data = this.serialize(snapshot, { includeId: true });
const urlForQueryRecord = this.buildURL(type.modelName, id, snapshot, 'updateRecord');
return this.ajax(urlForQueryRecord, 'POST', { data: data });
}
})
请注意type.typeKey
to的变化type.modelName