2011-11-25 16 views
22

Tengo el siguiente código, donde ato un cambio a un único atributo "attribute_1".Forma correcta de vincular múltiples cambios de atributos a un modelo Backbone.js

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

¿Cómo puedo vincular dos atributos? Esto no funciona:

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

Tampoco hace esto:

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

Respuesta

24

no sé si existe una función de este tipo "bulk-bind" (que podría abrir una solicitud de función para ello, parece útil).

Puede enlazar por separado:

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

O puede escuchar a todos los cambios (y luego filtrar en el oyente):

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

también, 'b ind() 'es encadenable:' this.bind (...). bind (...) '. –

+1

Si usa un oyente común, ¿cómo verifica qué atributo cambió? –

79

A partir de Backbone.js 0.9.0, la bind() función (que ha sido renamed to on()) soporta una lista delimitada por espacios de eventos:

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

// equivalent to 

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

Ahora, ¿esto llama a la devolución de llamada una o varias veces por cambio? – Sukima

+4

@Sukima Llama una vez por atributo modificado. Si el título cambia, se dispara una vez. Si el autor cambia, dispara una vez. Si cambian el título y el autor, primero una vez para el título y una vez para el autor. –

+2

¿Cómo se relaciona esto con la sintaxis listenTo? – backdesk

Cuestiones relacionadas