Ember数据:“didLoad”事件什么时候开火?

时间:2013-04-22 02:41:30

标签: ember.js ember-data

Ember Data's documentation discusses different events in a model instance's lifecycle
我希望只要模型实例的任何属性发生变化,就会触发didUpdate事件。但是我的实验没有表现出这种行为。

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

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

要让didUpdate事件触发,我该怎么做?

1 个答案:

答案 0 :(得分: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