Si desea que esta configuración funcione, debe hacer lo siguiente:
Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});
self.ready();
self.onStop(function () {
handle.stop();
});
});
No, en el lado del cliente, debe definir una colección solo del lado del cliente:
directories = new Meteor.Collection('thisNameMatters');
y suscríbase al conjunto de datos correspondiente:
Meteor.subscribe('thisNameDoesNotMatter');
Esto debería funcionar ahora. Avísame si crees que esta explicación no es lo suficientemente clara.
EDITAR
Aquí, el self.added/changed/removed
los métodos actúan más o menos como un despachador de eventos. Brevemente hablando, dan instrucciones a cada cliente que llamó
Meteor.subscribe('thisNameDoesNotMatter');
sobre las actualizaciones que deben aplicarse en la colección del cliente llamada thisNameMatters
asumiendo que esta colección existe. El nombre, pasado como el primer parámetro, se puede elegir casi arbitrariamente, pero si no hay una colección correspondiente en el lado del cliente, se ignorarán todas las actualizaciones. Tenga en cuenta que esta colección puede ser solo del lado del cliente, por lo que no necesariamente tiene que corresponder a una colección "real" en su base de datos.
Devolver un cursor desde su publish
método es solo un atajo para el código anterior, con la única diferencia de que se usa el nombre de una colección real en lugar de nuestro theNameMatters
. Este mecanismo en realidad le permite crear tantos "espejos" de sus conjuntos de datos como desee. En algunas situaciones esto puede ser muy útil. El único problema es que estas "colecciones" serán de solo lectura (lo cual tiene mucho sentido por cierto) porque si no están definidas en el servidor, los métodos correspondientes de 'insertar/actualizar/eliminar' no existen.