ember.js - Ember 数据 : how to set isDirty for a record?

标签 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
包括 didChangeData , becameDirty但这些都没有奏效。

有任何想法吗?

最佳答案

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

特别是,关于:
record.get('stateManager').transitionTo('loaded.saved')

关于ember.js - Ember 数据 : how to set isDirty for a record?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158329/

相关文章:

ember.js - 为什么bindAttr 不能与disabled 一起使用?这是一个错误吗?

ember.js - 绕过: No 'Access-Control-Allow-Origin' header is present on the requested resource

ember.js - Ember Js 移除 Metamorph 代码

ember.js - 如何在 Ember.js 中访问 find() 结果的长度

ember.js - 我应该如何使用 ember-data 通过 SSL 发送 POST 请求?

javascript - 在没有原始模型的情况下在 EmberJS 中设置新关系

javascript - Ember : Access ember data 'store' object from utility class

rest - 使 Jersey RESTful 服务器与 Ember Data 和 JSON API 兼容

ember.js - 从 Controller 或组件访问当前路由名称

Ember.js + Leaflet + rails(使用 Javascript MVC 创建一个 rails 应用程序并打开源映射)