2012-08-05 18 views
5

Estoy convirtiendo mi aplicación columna vertebral para que se inicie la comunicación con el servidor, previamente me acababa de rellenar la colección con los datos de prueba usando .add()¿La red troncal activa .add cuando se recolecta una colección?

He atado algunos eventos a las colecciones Añadir evento. Por lo tanto, cada vez que se agrega un elemento a la colección, puedo renderizar la vista y actualizar algunas estadísticas.

Parece que tan pronto como agregue la llamada .fetch() para obtener datos del servidor, los eventos de agregar se detienen.

por ejemplo

var PayableCommitmentCollection = Backbone.Collection.extend({ 
    model:PayableCommitment, 
    url:"/cc/account/contributions/", 

    initialize: function() { 
     this.bind("add",this.setInitialAmount,this); 
    } 
} 

this.SetInitialAmount() Nunca se llama después de ir a buscar crea los modelos de la colección.

También tengo 2 vistas que están viendo los artículos que se agregarán a esta colección y que ahora no se están actualizando.

Mi obvio trabajo es escribir mi propia llamada AJAX para que pueda agregar los elementos de la misma manera que he estado hasta ahora, sin embargo, estoy seguro de que la red troncal tiene la inteligencia para ayudarme aquí.

¿Alguien puede sugerir una forma en que pueda vincularse a la finalización de la búsqueda, o para que estimule el evento agregar.

Respuesta

5

Desde el :

fetchcollection.fetch([options])

Fetch el conjunto predeterminado de los modelos de esta colección desde el servidor, al restablecer la colección cuando llegan.

Y un reset:

restablecercollection.reset(models, [options])

Añadir y eliminar los modelos uno a la vez está muy bien, pero a veces hay tantos modelos de cambio que' Más bien solo actualizo la colección a granel. Use reinicie para reemplazar una colección con una nueva lista de modelos (o hashes de atributo), desencadenando un único evento "reset" al final.

Así que un fetch desencadenará una sola "reset" evento en lugar de un montón de "add" eventos. Necesita una versión de colección de setInitialAmount que puede vincular al "reset".


En Backbone 1.0, Collection#fetch tiene esto que decir:

fetchcollection.fetch([options])

Fetch el conjunto predeterminado de modelos de esta colección desde el servidor, poniéndolos en la colección cuando ellos llegan.
[...]
El comportamiento de buscar se puede personalizar utilizando las opciones set disponibles. Por ejemplo, para buscar una colección, consiguiendo un evento "add" para cada nuevo modelo, y un evento "change" para cada modelo existente cambiado, sin quitar nada: collection.fetch({remove: false})

lo tanto, si usted está utilizando 1.0+ entonces todo lo que debe hacer es llamar a su fetch con la opción remove: false.

+0

gracias, este reinicio hecho tiene más sentido. Supuse que la colección volvía vacía. También pude cambiar mi arnés de prueba para usar el reinicio también. – Bluephlame

+0

En Backbone 1.0.0 ahora logras esto al pasar 'remove: false' como una opción para' fetch'. – Radu

+0

@Radu: Gracias por el aviso. ¿Mejor ahora? –

6

El método fetch acepta un hash de opciones. Una de estas opciones puede ser la opción "agregar", que llama a agregar en la colección en lugar de restablecer.

collection.fetch({ add: true }); 
+0

Ya no funciona para Backbone 1.0.0. Ver el comentario en la respuesta anterior. – Radu

Cuestiones relacionadas