2011-11-25 7 views
22

Ho il seguente codice, in cui eseguo il binding di una modifica a un singolo attributo "attribute_1".Modo corretto di associazione di più modifiche di attributo a un modello Backbone.js

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

Come si associano due attributi? Questo non funziona:

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

Né questo:

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

risposta

24

Non so se esiste una funzione di tale "bulk-bind" (si potrebbe aprire una richiesta di funzionalità per esso, sembra utile).

È possibile associare separatamente:

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); 
    } 
}); 

Oppure si può ascoltare tutte le modifiche (e poi filtrare in chi ascolta):

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

Inoltre, 'b ind() 'è concatenabile:' this.bind (...). bind (...) '. –

+1

Se si utilizza un listener comune, come si controlla quale attributo è cambiato? –

79

A partire dal Backbone.js 0.9.0, il bind() la funzione (che è stato renamed to on()) supporta un elenco delimitato da spazi di eventi:

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

// equivalent to 

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

Ora richiama la richiamata una o più volte per modifica? – Sukima

+4

@Sukima Chiama una volta per attributo modificato. Se il titolo cambia, spara una volta. Se l'autore cambia, spara una volta. Se sia il titolo che l'autore cambiano, prima una volta per il titolo e una volta per l'autore. –

+2

In che modo questa mappa si sintonizza sulla sintassi listenTo? – backdesk