2011-10-03 7 views

Respuesta

12

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.

+0

+1. Gran respuesta. –

1

Eso depende de su estilo de programación. Yo siempre los configuro directamente. Si el Law of Demeter te suena bien y te interesa la orientación del objeto (y posiblemente con un fondo de Java/Microsoft -stack), entonces el estilo sería crear métodos getter/setter.

Si, por otro lado, está en el campo "Size is the Enemy" (también recomiendo Jeff Atwood's comments), sin duda debe establecer los datos del modelo directamente (como indiqué antes, estoy en este campo).

Dicho esto, los modelos Backbone.js ya tienen métodos getter y setter .get y .set. No debe manipular directamente al miembro .attributes. No estoy tan seguro de que no deba leer, tiendo a hacer eso de vez en cuando y aún no he tenido problemas por eso.

Cuestiones relacionadas