Mis publicaciones:
Meteor.publish('items', function() {
return Items.find({}, {skip: randomNumber, limit: 100});
});
Mi código de suscripción ocurre cuando se hace clic en un botón (en templates.event)
Meteor.subscribe('items');
Items.find().fetch();
Sin embargo, el problema es que los elementos no se actualizan con los datos nuevos, sino que se agregan datos nuevos a la lista anterior. ¿Qué puedo hacer para cancelar la suscripción de los datos antiguos?
2 respuestas
Cuando usted llama Meteor.subscribe
devolverá un identificador de suscripción.
Llama al stop
en el identificador para cancelarlo.
Por ejemplo, en su evento ayudante
if (SomeGlobalVar){
SomeGlobalVar.stop();
}
SomeGlobalVar = Meteor.subscribe('items');
La otra forma es ejecutar la suscripción dentro de Deps.autorun
; limpiará automáticamente las suscripciones antiguas .
Por ejemplo, en su controlador de eventos
Session.set('subscribe', true);
En otra parte de su código:
Deps.autorun(function(){
if (Session.get('subscribe')){
Meteor.subscribe('items');
}
});
Si llama a Session.set('subsribe', false);
Meteor cancelará / limpiará automáticamente esa suscripción a items
.
Me parece que hay un poco de confusión aquí, cuando se conecta a una fuente de datos reactiva no se suscribe a datos específicos, por lo que cuando se agregan nuevos registros, por supuesto, se agregan a sus datos a través de esa conexión.
Si entendí su pregunta y desea que los datos nuevos reemplacen por completo los datos antiguos, le aconsejo que no cree su plantilla en torno a la Colección, sino que la compile en una versión en caché de los datos (que se guardará en un objeto y se volverá reactivo usando Deps), de esa manera tendrá control total sobre los datos que se muestran.
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.