como todo lo demás en el desarrollo de software, "depende".
si está utilizando entradas de formulario en sus vistas y solo necesita obtener los datos de esas entradas en los modelos, configure los datos directamente. Esto se puede hacer de muchas maneras, incluyendo eventos de "cambio" de los campos de entrada, así:
MyView = Backbone.View.extend({
events: {
"change #name", "setName"
},
setName: function(e){
var val = $(e.currentTarget).val();
this.model.set({name: val});
}
});
Por otro lado, si usted está dando inicio a la lógica de negocio y otro código que pasa a establecer el datos en el modelo (pero realmente solo lo hace como parte de la lógica comercial), entonces debe llamar a un método en el modelo.
Una "máquina de estado" sería un buen ejemplo de cuándo haría esto. O bien, en una galería de imágenes que escribí, tenía cierta lógica sobre la selección de una imagen para mostrar. Si una imagen ya está seleccionada, no la vuelva a seleccionar. Pongo esta lógica en un método en mi modelo de la imagen:
Image = Backbone.Model.extend({
select: function(){
if (!this.get("selected")){
this.set({selected: true});
}
}
});
Como se ilustra aquí, me gusta correr por la simple regla de que si tengo cero lógico en torno a la llamada a establecer, luego configurarlo directamente desde cualquier lugar Yo soy. Si hay alguna lógica relacionada con el modelo, alrededor del conjunto, entonces lo puse en el modelo.
De cualquier manera, cuando desee establecer datos, debe usar el método set
. Pasar por alto esto y establecer los atributos del modelo directamente a través del model.attributes
evitará que se dispare una gran parte del código del Backbone y posiblemente le cause problemas.
+1. Gran respuesta. –