我正在尝试手动将脏记录发送到清洁状态(与如何使用 ember-data 手动将对象状态设置为清洁(保存)有关)。
我偶然发现了由于不希望使用 ember-data 或错误而可能发生的事情。
基本上,我所做的是
- 找到有问题的记录,
.set()
记录在案的财产,以及- 手动将记录发送到“becameClean”状态。这样做是为了避免在调用
App.store.commit();
上述问题中提到的原因时提交记录。
在开始之前,我在 ember-data 部分添加了enter: function() { console.log(this); console.log(this.get('path')); }
一行DS.State = ...
,以便查看记录经历了哪些状态。
我正在运行 GitHub 的最新版本。这是我的方法:
步骤 1)致电App.Fruit.find('banana');
:
console.log(this);
结果是:<DS.State:ember1077> { initialState="saved", isLoaded=true, saved=<DS.State:ember1078>, more...}
console.log(this.get('path'));
结果是:- 'rootState.empty'
- 'rootState.loading'
- 'rootState.loaded'
- 'rootState.loaded.saved'
步骤 2)致电App.Fruit.find('banana').set('description', 'Yellow fruit!');
:
console.log(this);
结果是:<(subclass of DS.State):ember1084> { dirtyType="updated", childStates=[3], eventTransitions={...}, more...}
console.log(this.get('path'));
结果是:- 'rootState.loaded.updated'
步骤 3)致电App.store.get('defaultTransaction.buckets');
:
- 导致记录出现在“更新”存储桶中
步骤 4)致电App.Fruit.find('banana').get('stateManager').send('becameClean');
:
console.log(this);
结果是:<DS.State:ember1078> { childStates=[0], eventTransitions={...}, states={...}, more...}
console.log(this.get('path'));
结果是:- 'rootState.loaded.saved'
步骤 5)致电App.store.get('defaultTransaction.buckets');
:
- 导致记录出现在“干净”存储桶中
中场休息:好的,到目前为止,一切都很好。看来我已成功将记录发送到干净状态。但是,会发生这种情况:
步骤 6)致电App.Fruit.find('banana').set('description', 'Even more yellow fruit!');
:
console.log(this);
结果是:(没有)
console.log(this.get('path'));
结果是:(没有)
步骤 7)致电App.store.get('defaultTransaction.buckets');
:
- 导致记录出现在“干净”存储桶中
问题是,在我将“becameClean”状态发送到记录后,无论我之后是否更改记录,它都保持在“loaded.saved”状态。
当第 2 步导致使用 aDS.State
创建新的子类对象时dirtyType="updated"
,为什么第 6 步也不会导致这种情况?
我的问题是:这是一个错误还是因为我不希望使用而不起作用.send('becameClean')
?