1

Ember Data 的文档讨论了模型实例生命周期中的不同事件
我希望didUpdate每当模型实例的任何属性发生更改时都会触发该事件。但是我的实验没有显示这种行为。

这是一个 JS Bin 示例: http: //jsbin.com/uziwam/9/edit
在该示例中,您可以看到我在“ren”模型实例上注册了处理程序:我为and事件注册了处理程序(console.log(..)消息) 。didLoaddidUpdate

启动代码时,会触发“ren's”didLoad事件,这是预期的行为。然后,当使用 GUI 编辑“ren's”属性时,不会触发任何didUpdate事件。这是(至少对我而言)意想不到的行为。

我该怎么做才能让didUpdate事件触发?

4

1 回答 1

3

当记录被有效保存时触发该didUpdate事件,这意味着您必须提交它,并且您的适配器已确认提交。

要提交记录的更改,可以使用 record.get('transaction').commit()。

http://jsbin.com/uziwam/11/edit

如果您想在属性更改时提交事务,您可以在其上放置一个观察者。

App.User = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),

  firstNameDidChange: function(){
    this.get('transaction').commit();
  }
});

如果您想针对每个记录的属性进行概括,您应该能够执行以下操作:

App.User = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),

  init: function(){
    this._super();
    this.eachAttribute(function(attributeName){
      this.addObserver(attributeName, this, this.commitRecord); 
    }, this);
  }

  commitRecord: function(){
    this.get('transaction').commit();
  }
});

http://jsbin.com/uziwam/14/edit

于 2013-04-22T07:17:47.630 回答