1

Ember Data のドキュメントでは、モデル インスタンスのライフサイクルにおけるさまざまなイベントについて説明しています。モデル インスタンスのプロパティが変更されるたび
に、イベントがトリガーされることを期待します。didUpdateしかし、私の実験では、この動作は示されません。

JS Bin の例を次に示します: http://jsbin.com/uziwam/9/edit
この例では、"ren" モデル インスタンスにハンドラーを登録していることがわかります。およびイベントconsole.log(..)のハンドラー (メッセージ)を登録します。didLoaddidUpdate

コードを開始すると、「ren's」didLoadイベントが発生しますが、これは予期された動作です。次に、GUI を使用して "ren" のプロパティを編集すると、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 に答える