Javascript 如何在余烬中发送帖子以代替放置或删除?

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

如何使用余烬重新适应程序使用POST谓词更新或删除记录?默认情况下,它使用PUT或DELETE动词发送json。使用这些动词的发送因我的工作地点而被阻止

我有点希望我能做Rails的事情,在那里你可以发送一篇帖子,然后告诉它,这是一个秘密的PUT还是DELETE,使用额外的元信息


我正在通过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 });
  }
})