2011-11-25 52 views
22

我有以下代碼,其中將更改綁定到單個屬性「attribute_1」。將多個屬性更改綁定到Backbone.js模型的正確方法

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

如何綁定兩個屬性?這不起作用:

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 ind()'是可鏈式的:'this.bind(...)。bind(...)'。 –

+1

如果使用普通偵聽器,您如何檢查哪個屬性發生了變化? –

79

由於Backbone.js的0.9.0中, bind()功能(已經renamed to on())支持以空格分隔的事件列表:

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

// equivalent to 

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

現在是否每次更改都會調用一次或多次回調? – Sukima

+4

@Sukima它每調用一次屬性就調用一次。如果標題發生變化,則觸發一次。如果作者更改,則會觸發一次。如果標題和作者都改變,首先標題一次,作者一次。 –

+2

這是如何映射到listenTo語法的? – backdesk