EmberJS:是否可以仅保存修改过的对象?

bgu*_*ach 2 javascript ember.js ember-data

我有一个小而相当标准的应用程序:

  • 从服务器获取对象
  • 渲染对象并允许对它们进行一些编辑.如果这很重要,则此编辑仅影响DS.hasMany属性.
  • 提供保存回服务器(它不应该自动发生,仅在用户请求时)

app控制器处理一个save事件,然后我存储了这些东西.代码如下所示:

import Ember from 'ember';

export default Ember.Controller.extend({
    actions: {
        save() {
            this.store.peekAll('object').forEach(obj => {
                obj.save();
            });
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这会为本地加载的每个对象发出PUT请求.它工作正常,但它有点蛮力.相反,我想只保存修改过的对象.

我已尝试使用dirtyType,但它返回的undefined内部.forEach,还有hasDirtyAttributes,但它false总是返回.

我可以构建自己的修改对象缓存,但这将是很多工作和容易出错.有没有处理这种情况的标准方法?提前致谢.

Kit*_*nde 5

这很好用:

if(obj.get('hasDirtyAttributes')){
  obj.save();
}
Run Code Online (Sandbox Code Playgroud)

JSBin:http://emberjs.jsbin.com/jiqevo/1/edit?html,css,js,output

修改关系不会将模型设置为脏.作为一种解决方法,您可以手动将其设置为脏,如下所示:

this.get('model').send('becomeDirty');
Run Code Online (Sandbox Code Playgroud)