javascript - Ember JS,补丁记录 REST 适配器

标签 javascript rest ember.js

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生成请求负载的一些文档,但应该不会太难。

关于javascript - Ember JS,补丁记录 REST 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297152/

相关文章:

javascript - 将日期设置为 future 10 天,格式为 dd/mm/yyyy(例如 21/08/2010)

rest - 要求数组在 Swagger 架构对象定义中至少包含一个元素

c# - 如何在 C# 中使用 WebRequest 和 HttpWebResponse 导航到身份验证 URL 并登录网站?

ember.js - 寻找折旧错误的根源

javascript - Ember 数据 : Get a Model in the Console

javascript - 如何使用 moment js 从 ISO 日期获取月份名称

javascript - 在选择多个复选框时将属性附加到变量

javascript - Ember CLI - 未捕获错误 : Could not find module ember?

php - 如果 MySQL 结果为空显示确认框

typescript - REST - 强类型模型