Jika Anda ingin penyiapan ini berfungsi, Anda perlu melakukan hal berikut:
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();
});
});
Tidak di sisi klien, Anda perlu mendefinisikan koleksi sisi klien saja:
directories = new Meteor.Collection('thisNameMatters');
dan berlangganan kumpulan data yang sesuai:
Meteor.subscribe('thisNameDoesNotMatter');
Ini harus bekerja sekarang. Beri tahu saya jika menurut Anda penjelasan ini tidak cukup jelas.
EDIT
Di sini, self.added/changed/removed
metode bertindak lebih atau kurang sebagai operator acara. Secara singkat mereka memberikan instruksi kepada setiap klien yang menelepon
Meteor.subscribe('thisNameDoesNotMatter');
tentang pembaruan yang harus diterapkan pada koleksi klien bernama thisNameMatters
dengan asumsi bahwa koleksi ini ada. Nama - diteruskan sebagai parameter pertama - dapat dipilih hampir secara sewenang-wenang, tetapi jika tidak ada koleksi yang sesuai di sisi klien, semua pembaruan akan diabaikan. Perhatikan bahwa koleksi ini dapat menjadi sisi klien saja, sehingga tidak harus sesuai dengan koleksi "nyata" di database Anda.
Mengembalikan kursor dari publish
. Anda metode ini hanya jalan pintas untuk kode di atas, dengan satu-satunya perbedaan bahwa nama koleksi yang sebenarnya digunakan sebagai ganti theNameMatters
kami . Mekanisme ini sebenarnya memungkinkan Anda membuat "mirror" set data sebanyak yang Anda inginkan. Dalam beberapa situasi ini mungkin cukup berguna. Satu-satunya masalah adalah bahwa "koleksi" ini akan menjadi hanya-baca (yang benar-benar masuk akal BTW) karena jika tidak ditentukan di server, metode `insert/update/remove' yang sesuai tidak ada.