4

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

我有点希望我可以做 Rails 的事情,你发送一个 POST 并使用额外的元信息告诉它是秘密 PUT 还是 DELETE。

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

4

3 回答 3

9

我认为覆盖DS.RESTAdapter updateRecordanddeleteRecord可以工作:

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");
  }
});
于 2013-09-17T14:46:30.293 回答
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);
    }
});
于 2014-04-08T11:48:44.550 回答
0

这是Ember 2.7.3Ember 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.typeKeyto的变化type.modelName

于 2016-11-10T06:42:15.667 回答