如何在Ember中发送POST代替PUT或DELETE?

时间:2013-09-17 14:06:58

标签: javascript json ember.js ember-data

如何使用Ember RESTAdapter使用POST动词更新或删除记录?默认情况下,它使用PUT或DELETE谓词发送json。在我工作的地方阻止使用这些动词发送。

我有点希望能在发送POST的情况下执行Rails,并告诉它是否使用额外的元信息秘密地使用PUT或DELETE。

我正在通过RESTAdapter使用Ember 1.0.0和ember-data 1.0.0beta2。

3 个答案:

答案 0 :(得分:8)

我认为覆盖DS.RESTAdapter updateRecorddeleteRecord可能会有效:

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