7

私はモデルのプロパティを変更するたびに、変更イベントを発生させたいと思います。これは可能ですか?他にも:バックボーン - 1つのプロパティを除き、変更イベントをモデルにバインドすることはできますか?

model.bind('change:prop1', func); 
model.bind('change:prop2', func); 
model.bind('change:prop3', func); 
etc.... 

代わりに、イベントハンドラ内からどのプロパティが変更をトリガしたかを知る方法はありますか?

おかげ

答えて

11

あなたが属性をチェックするmodel.bind('change',function() {/*...*/})と機能の使用hasChangedでを使用することができます。if(model.hasChanged('propIWantToExclude')) return;

+0

質問の最初の部分は誰でも答えることができますか?すなわち、私はモデルのプロパティを変更するたびに、変更イベントを発生させる方法を除きます。 –

+0

^私はそれが編集されているので、あなたはおそらく編集の前に尋ねたので、応答のような "変更"を使用してください:) – gthmb

0

は質問の最初の部分に答えるためにデビッドTuiteの要求に応え、あなたはに機能を設定できます変更されたイベントに応答し、無視するプロパティが変更されていない場合はカスタムイベントをトリガします。

このロジックは、プロパティが変更されていない場合、カスタムイベント:'somePropertyOtherThanThePropIWantToExcludeChanged'をトリガします。複数のプロパティを無視するものも含め、変更された場合は、カスタムイベントもしないで、火災になります。「propIWantToExclude」と他のいくつかの属性が一緒に変更された時には、上記

model.bind('change', function(){ 
    if(!model.hasChanged('propIWantToExclude')){ 
     model.trigger('somePropertyOtherThanThePropIWantToExcludeChanged'); 
    } 
}); 
3

ジャスティンの答えが返されますあなたはおそらくそれをしたくないので、model.changedAttributesのサイズを見てください:

if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) { 
    return; 
} 
+0

は: "model.hasChanged( 'attrIWantToExclude')&& Object.keys model.changedAttributes())。length == 1 "となります。または "Object.keys(model.changed).length == 1 && ..."となります。 changedAttributesは関数であり、変更されたオブジェクトのハッシュを返します。存在しない場合はfalseを返します。 hash.lengthは機能しないので、次のようなものが必要です。Object.keys(hash).length。 changedAttributesおよびObject.keys(false)エラーによってfalseが返されるため、changedAttributes(または他の場合はinternal model.changed参照)のObject.keys参照の前にhasChangedテストが必要です。 - http://backbonejs.org/#Model-changedAttributes –

関連する問題