2012-05-25 15 views
6

De acuerdo con el documento aquí: http://documentcloud.github.com/backbone/#FAQ-events la colección tiene un evento sincronizado disparado cuando hago algo para sincronizar la colección con el servidor. Intento invocar el método fetch en la recopilación y esperar el evento de sincronización en él, pero nunca sucede. Agregar evento se activa, pero solo necesito un evento después de sincronizar todos los elementos en la colección para actualizar la vista correspondiente. Hay otra forma de despedir este evento?Evento de sincronización de Backbone.js en la colección

Respuesta

2

Creo que el evento "sincronización" solo se activa cuando se cambia un modelo. Por lo tanto, si crea, actualiza o elimina un modelo, se activará el evento "sincronizar".

En su caso, creo que desea escuchar el evento "restablecer" en la colección.

Edit: Si está configurando la opción {add:true}, entonces no hay un solo evento Backbone que se activará después de que se hayan agregado todos los modelos. Usted tiene algunas opciones:

  1. sólo escuchar al evento add y esperar que se llama repetidamente
  2. emular un solo evento mediante el uso de un controlador que ha sido antirrebote usando la función _.debounce().
  3. El valor de retorno de fetch() es un objeto jQuery XMLHttpRequest. Implementa la interfaz jQuery Deferred. Entonces podrías escuchar ese final. Por ejemplo:

    myCollection.fetch({add:true}).done(function(){ 
        myView.render(); //or whatever 
    }); 
    
+0

Restablecer evento no se ajusta a mis necesidades porque llamo fetch with add: true parameter. –

5

La solución es para encender evento sync maunually de devolución de llamada 'éxito' se pasa como parámetro a buscar método.

this.collection.fetch({add: true, success: function(collection, response){ 
      collection.trigger('sync'); 
}}); 
+1

A partir de la red troncal 0.9.9 agregando el disparador de sincronización en caso de éxito, la devolución de llamada ya no es necesaria. Desde http://backbonejs.org/#changelog Eventos consolidados de "sincronización" y "error" dentro de Backbone.sync. Ahora se desencadenan independientemente de la existencia de éxito o de devoluciones de errores. –

Cuestiones relacionadas