2011-11-25 10 views
22

次のコードを使用して、変更を単一の属性 "attribute_1"にバインドします。複数の属性変更をBackbone.jsモデルにバインドする正しい方法

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

どのように2つの属性をバインドするのですか?これは動作しません:

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1, change:attribute_2", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

もこれを行います:

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1 change:attribute_2", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

答えて

24

、このような「バルク・バインド」関数が存在する場合、私は、あなたがそれのための機能要求を開くことができます(それを知りません有用と思われる)。

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    var listener = function() { console.log('changed'); }; 
    this.bind("change:attribute_1", listener); 
    this.bind("change:attribute_2", listener); 
    } 
}); 

それとも、すべての変更を聴く(その後、リスナーにフィルタリングする)ことができます:

あなたはそれらを個別にバインドすることができ

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    var listener = function() { console.log('changed'); }; 
    this.bind("change", listener); 
    } 
}); 
+12

、 'B:(renamed to on()をされている)bind()関数は、イベントのスペース区切りのリストをサポートしていますind() 'は連鎖可能です:' this.bind(...)。bind(...) '。 –

+1

共通のリスナーを使用している場合、どの属性が変更されたかをどのように確認しますか? –

79

をBACKBONE.JS 0.9.0の時点では、また

model.on("change:title change:author", ...) 

// equivalent to 

model.bind("change:title change:author", ...) 
+2

これは、コールバックを変更ごとに1回または複数回コールしますか? – Sukima

+4

@Sukima変更された属性ごとに1回呼び出します。タイトルが変更された場合は、一度発生します。作成者が変更された場合は、一度発生します。タイトルと著者の両方が変更された場合は、タイトルの場合は1回、著者の場合は1回。 –

+2

これはlistenTo構文とどのようにマップされますか? – backdesk

関連する問題