2012-07-11 17 views
14

que tienen algo de código donde quiero un NoteCollectionView a añadir una nota a la NoteCollection. Esto es provocado por un newNote función en el NoteCollectionView:Backbone: ¿Agregar un modelo a una colección desde una vista de colección?

newNote: function(data) { 
    var note = new Note(data); 
    this.collection.add(note); 
}, 

todavía soy muy nuevo en la columna vertebral, y quiero para asegurarse de que esta se sincroniza con el servidor. Las preocupaciones que tengo son:

1) simplemente añadiendo esta nota a la colección de disparo() una mano salvadora desde el servidor, y actualizar el modelo con el ID de que el servidor le da? O bien,

2) Si el servidor no actualiza mi modelo y me da una identificación real, ¿cómo guardo el modelo con note.save() y obtengo una identificación del servidor?

Respuesta

33

Para hacer frente a su primera pregunta, no, .add no activará ningún tipo de llamada al servidor; solo agregará un modelo a una colección.

Sin embargo, usted tiene un par de opciones. Una sería la de crear el nuevo modelo de nota, guardarlo en la base de datos y luego añadirlo a la colección:

newNote: function(data) { 
    var note = new Note(data); 
    note.save(); 
    this.collection.add(note); 
} 

La segunda opción es simplemente usar Backbone's collection.create method. Darle un hash de atributos y se

  1. Crear el modelo
  2. guardarlo en la base de datos de
  3. añadirlo a la colección

Todo de una sola vez, así:

newNote: function(data) { 
    return this.collection.create(data); 
} 

collection.create también devuelve el modelo de nueva creación, ilustrado por mi estado de retorno por encima.

+0

Gracias, gran respuesta! Entonces, ¿qué parámetros debería tomar mi servlet, y debería escribir el nuevo modelo al JSON devuelto en la respuesta? – theeggman85

+1

'collection.create' utiliza' model.save', por lo tanto, suponiendo que sus modelos se guardan correctamente en la base de datos, no se necesitan más cambios. En general, tiendo a devolver los atributos del modelo como JSON después de guardarlos y configurarlos en el modelo Backbone; esto me da la flexibilidad para modificar algunos atributos durante la operación de almacenamiento, y los datos del modelo Backbone reflejará estas alteraciones después de la parada completa – jackwanders

+0

crear trabajará grande - hay una opción que puede pasar para evitar que el ahorro db? –

Cuestiones relacionadas