Javascript 如何在余烬中发送帖子以代替放置或删除?
如何使用余烬重新适应程序使用POST谓词更新或删除记录?默认情况下,它使用PUT或DELETE动词发送json。使用这些动词的发送因我的工作地点而被阻止 我有点希望我能做Rails的事情,在那里你可以发送一篇帖子,然后告诉它,这是一个秘密的PUT还是DELETE,使用额外的元信息Javascript 如何在余烬中发送帖子以代替放置或删除?,javascript,json,ember.js,ember-data,Javascript,Json,Ember.js,Ember Data,如何使用余烬重新适应程序使用POST谓词更新或删除记录?默认情况下,它使用PUT或DELETE动词发送json。使用这些动词的发送因我的工作地点而被阻止 我有点希望我能做Rails的事情,在那里你可以发送一篇帖子,然后告诉它,这是一个秘密的PUT还是DELETE,使用额外的元信息 我正在通过RESTAdapter使用Ember 1.0.0和Ember data 1.0.0beta2。我认为覆盖DS.RESTAdapterupdateRecord和deleteRecord可以: DS.RESTAd
我正在通过RESTAdapter使用Ember 1.0.0和Ember data 1.0.0beta2。我认为覆盖
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");
}
});
您可以在RestaAdapter上覆盖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.7.3和余烬数据2.7.0的语法
请注意将
type.typeKey
更改为type.modelName
非常感谢!虽然您的答案设置了正确的路径,但最终我不得不重写Embers ajax包装器(代码示例中的this.ajax()),而不是updateRecord()或deleteRecord(),以便添加表单属性{u method='PUT'}“具有Rails可以接受的内容类型。但是我没有明确说明答案必须是Rails友好的,所以被接受的答案是你的,先生!不客气。Rails使用_method=“PUT”,因为浏览器中的表单不支持PUT。在ajax调用中,所有调用都将起作用。
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 });
}
})