Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以只保存修改过的对象?_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 是否可以只保存修改过的对象?

Javascript 是否可以只保存修改过的对象?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个小型且相当标准的应用程序: 从服务器获取对象 渲染对象并允许对其进行一些编辑。如果它很重要,则此编辑仅影响DS。它有许多属性 提供对服务器的回存(不应自动进行,仅应用户请求) 应用程序控制器处理一个save事件,我在那里存储东西。代码如下所示: import Ember from 'ember'; export default Ember.Controller.extend({ actions: { save() { this.sto

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

  • 从服务器获取对象
  • 渲染对象并允许对其进行一些编辑。如果它很重要,则此编辑仅影响
    DS。它有许多属性
  • 提供对服务器的回存(不应自动进行,仅应用户请求)
应用程序控制器处理一个
save
事件,我在那里存储东西。代码如下所示:

import Ember from 'ember';

export default Ember.Controller.extend({
    actions: {
        save() {
            this.store.peekAll('object').forEach(obj => {
                obj.save();
            });
        }
    }
});
这会对本地加载的每个对象发出PUT请求。它工作得很好,但有点暴力。相反,我只想保存修改过的对象

我尝试了,但它在
.forEach
中返回
未定义的
,而且它总是返回
false

我可以为修改过的对象构建自己的缓存,但这需要大量工作,而且容易出错。有没有处理这种情况的标准方法?提前感谢。

这很好用:

if(obj.get('hasDirtyAttributes')){
  obj.save();
}
JSBin:

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

this.get('model').send('becomeDirty');

嗨,这不是我需要的。我认为,当对象尚未与本地存储同步(即,正在等待事件循环)时,此
isDirty
属性为真。在我的例子中,当用户单击save时,所有对象都已在本地同步,
isDirty
始终为false。我需要的是一种方法来判断一个对象是否在加载后被本地修改。@ikaros45不,它肯定是在什么时候被修改的。如果您这样做:
setTimeout(函数(){If(obj.get('isDirty')){console.log(“我脏”);}},1000)对象仍将是脏的,即它没有等待eventloop。@ikaros45您可能看不到它的原因是ember不支持关系上的
isDirty
。这就是原因。作为一种解决方法,每次更改
hasMany
时,我都会让控制器将模型设置为脏的:
this.get('model').send('becomeDirty')
。这是不完全正确的,因为这样做和撤消都会使对象变脏,但这是完全可以接受的。将此信息包含在您的答案中,我将接受:)