2013-05-24 12 views
7

このグローバル変更イベントでは、変更された属性を検出する方法はありますか?変更イベントの変更属性の取得

myModel.on('change', function(model) { 
    // Which attribute changed? 
}); 

私は次のことを試してみました:myModel.previousAttributes()を使用して

  • をしかし、それは常に最新の値を返して...私はそれが唯一のサーバーとの対話の後に更新されますね。
  • トラフ属性を反復し、myModel.hasChanged(attr)を使用しますが、常にfalseを返します。

これを達成する方法はありますか?

答えて

12

あなたは は何も存在しない場合
が変わっただけでモデルの属性のハッシュ、または虚偽を取得model.changedAttributes

changedAttributes model.changedAttributes([属性])を使用することができます。
オプションで外部属性ハッシュを に渡して、モデルと異なるハッシュの属性を返すことができます。 これは、更新 、または例えば サーバー

への変更を同期させることに必要なもの呼び出し、

var m = new Backbone.Model({ 
    att1: 'a', 
    att2: 'b', 
    att3: 'c' 
}); 

m.on('change', function() { 
    console.log(m.changedAttributes()); 
    console.log(_.keys(m.changedAttributes())); 
}); 

m.set({ 
    att1: 'd', 
    att3: 'e' 
}); 

すべきであり、そのビューの部分を把握するために使用することができますデモhttp://jsfiddle.net/nikoshr/NYnqM/

+0

偉大な、ちょうど私が必要としたことありがとう – jviotti

+1

私はパーティーに遅れることがあります。バックボーン0.9.9以降を使用している場合は、.onの代わりに.listenToを使用して、ガベージコレクションの影響を受けないオブジェクトにならないようにしてください。 – Ananda

+0

よ...クール...ありがとう!!! –

関連する問題