如何使用Ember RESTAdapter使用POST动词更新或删除记录?默认情况下,它使用PUT或DELETE谓词发送json。在我工作的地方阻止使用这些动词发送。
我有点希望能在发送POST的情况下执行Rails,并告诉它是否使用额外的元信息秘密地使用PUT或DELETE。
我正在通过RESTAdapter使用Ember 1.0.0和ember-data 1.0.0beta2。
答案 0 :(得分:8)
我认为覆盖DS.RESTAdapter
updateRecord
和deleteRecord
可能会有效:
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");
}
});
答案 1 :(得分:2)
您可以在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);
}
});
答案 2 :(得分:0)
这是 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
更改为type.modelName