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')
。这是不完全正确的,因为这样做和撤消都会使对象变脏,但这是完全可以接受的。将此信息包含在您的答案中,我将接受:)