Ember JS,补丁记录REST适配器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ember JS,补丁记录REST适配器相关的知识,希望对你有一定的参考价值。

有没有办法让Ember JS使用PATCH动词来部分更新服务器上的记录(而不是覆盖整个记录的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动词。

答案

有办法做到这一点,但你必须做一些工作。具体来说,您需要覆盖适配器中的updateRecord方法。修改default implementation,你应该想出这样的东西:

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);
    }
});

您将不得不深入研究Snapshot文档以生成请求有效负载,但这不应该太难。

另一答案

你可以在使用PATCH动词的ember中使用save()。使用HTTP PATCH谓词更新后端已存在的记录。

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'
});

寻找更多细节here

以上是关于Ember JS,补丁记录REST适配器的主要内容,如果未能解决你的问题,请参考以下文章

Ember js - 更新其他表后 Hasmany 关系中断

Ember.js Rest Adapter:无根映射 JSON(.NET Web API)

Ember cli mirage 错误:补丁处理程序无法读取 null 的属性更新

Ember 关系在测试环境中不尊重模型自定义适配器

如何从express中的PATCH请求获取请求有效负载

如何使用 Ember.js 和 ember-data 创建新记录?