Javascript Ember JS,补丁记录REST适配器

Javascript Ember JS,补丁记录REST适配器,javascript,rest,ember.js,Javascript,Rest,Ember.js,Ember JS是否有办法使用补丁动词来部分更新服务器上的记录(而不是覆盖整个记录的PUT) 创建记录 使用POST,这很好 var car = store.createRecord('car', { make: 'Honda', model: 'Civic' }); car.save(); // => POST to '/cars' 修改记录 始终使用PUT,这并不理想 car.set('model', 'Accord') car.save(); // => PUT to

Ember JS是否有办法使用
补丁
动词来部分更新服务器上的记录(而不是覆盖整个记录的
PUT

创建记录

使用
POST
,这很好

var car = store.createRecord('car', {
  make: 'Honda',
  model: 'Civic'
});
car.save(); // => POST to '/cars'
修改记录

始终使用
PUT
,这并不理想

car.set('model', 'Accord')
car.save(); // => PUT to '/cars/{id}'

我想控制用于保存的HTTP谓词。

有一种方法可以做到这一点,但您需要做一些工作。具体来说,您需要重写适配器中的方法。修改,您应该提出如下内容:

export default DS.RESTAdapter.extend({
    updateRecord(store, type, snapshot) {
        const payload = {};
        const changedAttributes = snapshot.changedAttributes();

        Object.keys(changedAttributes).forEach((attributeName) => {
            const newValue = changedAttributes[attributeName][1];
            // Do something with the new value and the payload
            // This will depend on what your server expects for a PATCH request
        });

        const id = snapshot.id;
        const url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');

        return this.ajax(url, 'PATCH', payload);
    }
});
要生成请求有效负载,您必须深入研究文档,但这应该不会太难。

您可以在ember中使用使用补丁谓词的
save()
。 后端上已经存在的记录将使用HTTP修补程序谓词进行更新

store.findRecord('post', 1).then(function(post) {
  post.get('title'); // => "Rails is Omakase"

  post.set('title', 'A new post');

  post.save(); // => PATCH to '/posts/1'
});

查看更多详细信息

请在回答中演示其工作原理。“后端已存在的记录将使用HTTP修补程序动词进行更新。”发件人:此回答中引用的文档与特定数据适配器的文档冲突。在保存现有记录时调用的updateRecord方法使用PUT动词,该动词将替换整个记录,而不是像预期的那样使用补丁只更新提供的字段。嘿@GJK,我可以知道如何在模型上调用save方法吗?这是一个简单的模型。save()?