7

我有一个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 但是这些都不起作用。

有任何想法吗?

4

2 回答 2

3

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

特别是关于:

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

于 2013-07-08T17:36:32.703 回答
3

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

> record.isDirty()
< false
> record.send('becomeDirty')
< undefined
> record.isDirty()
< true
于 2014-06-03T18:06:56.213 回答