2012-04-18 17 views
9

Estoy intentando mostrar una alerta al usuario cuando se agregan datos a la base de datos. Así que escribí (en el lado del cliente):cursor.observe ({added}) comportamiento en Meteor

Meteor.autosubscribe(function() { 
    ItemCollection.find().observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
}); 

Y me encontré con que no sólo las alertas se muestran cuando se añade un nuevo elemento a la base de datos en el lado del servidor (que supongo que es normal :)) pero alertas también se muestran para cada elemento agregado previamente cuando actualizo la página. Supongo que Meteor obtiene todos los datos de la base de datos de Mongo al inicio (para completar el Minimongo DB local) y luego activa el evento 'agregado' para cada elemento agregado en la base de datos local.

¿Pero este es el comportamiento normal? ¿Cómo puedo recibir solo los elementos que son "verdaderamente" agregados en la base de datos en el servidor?

Respuesta

13

Está observando un cursor para la base de datos del lado del cliente y esa base de datos puede no finalizar la sincronización hasta que la página termine de cargarse, por lo que el comportamiento tiene sentido. Es posible que desee buscar la suscripción explícita a una colección como se explica en la respuesta al this question.

Si sus datos tienen un campo created_at, puede observar los elementos creados después de que se cargue la página.

ItemCollection.find({created_at : {$gt: some_current_time}}).observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
+0

Gracias por su ayuda, es justo lo que necesitaba! Voy a intentar esto! – TiuSh

+0

¡Impresionante! Estoy muy contento de escuchar que ayudó. – lashleigh

+0

Consulte también la respuesta a esta pregunta: http://stackoverflow.com/questions/21355802/meteor-observe-changes-added-callback-on-server-fires-on-all-item –