Ember Data:如何为记录设置isDirty?

时间:2013-04-22 23:20:09

标签: ember.js ember-data

我有一个details: DS.attr('recursive_object')自定义转换(它是一个递归对象)。

可以在适当的位置编辑details attr,而不更改实际对象引用(例如,编辑详细信息attr上的子细节)。但是,这不会触发父记录的isDirty标记。

如何手动通知DS.Model记录已更新?

模型定义:

App.MyRecord = DS.Model.extend
  details: DS.attr "recursive object"

修改details

# record is an instance of App.MyRecord
# makes a change to the record's details attr 
record.makeChangeToDetails()
record.get('isDirty') # still false because Ember doesn't know that a sub-detail changed.

我尝试过的事情:

使用record.makeChangeToDetails()来电包裹will/didSetProperty

record.send 'willSetProperty', name: 'details'
record.makeChangeToDetails()
record.send 'didSetProperty', name: 'details'

致电notifyPropertyChange

record.notifyPropertyChange 'details'

调用set并传递相同的对象

record.makeChangeToDetails()
record.set 'details', record.get('details')

我还尝试从此处发送各种其他DS.model状态事件:https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js  包括didChangeDatabecameDirty,但这些都不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我从另一个问题中得到了一些线索:How to manually set an object state to clean (saved) using ember-data

特别是关于:

record.get('stateManager').transitionTo('loaded.saved')

答案 1 :(得分:3)

使用1.0.0-beta.7+canary.b45e23ba,这似乎可以完成工作:

> record.isDirty()
< false
> record.send('becomeDirty')
< undefined
> record.isDirty()
< true