【问题标题】:Ember Data: how to set isDirty for a record?Ember Data:如何为记录设置 isDirty?
【发布时间】:2013-04-16 00:24:46
【问题描述】:

我有一个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.

我尝试过的事情:

will/didSetProperty 调用包装record.makeChangeToDetails()

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,但这些都不起作用。

有什么想法吗?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

    特别是关于:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2014-05-06
        相关资源
        最近更新 更多