Meteorjs: Hapus reaktivitas terhadap pernyataan publikasi tertentu

Apakah ada cara untuk mempublikasikan setelah permintaan berlangganan dibuat dan kemudian berhenti mendorong perubahan yang dibuat pada koleksi hingga klien berlangganan lagi?

Saya punya skenario ini:

pelayan:

Meteor.publish("posts", function () {
    return Messages.find(); //Do not push changes to this collection!
});

Klien:

Meteor.subscribe("posts");

person em.rexhepi    schedule 23.12.2014    source sumber
comment
Saat Anda mengatakan publikasi otomatis, Anda sepertinya tidak merujuk pada paketnya tetapi reaktivitas dan sinkronisasi data. Apakah saya benar?   -  person Kyll    schedule 23.12.2014
comment
@Kyll ya maaf atas penjelasan saya yang buruk. Ya saya ingin datanya TIDAK REAKTIF.   -  person em.rexhepi    schedule 23.12.2014
comment
Saya siap menjawab, hanya sebuah pertanyaan singkat: Akankah suatu metode berhasil? Mengirim serangkaian semua posting ke klien?   -  person Kyll    schedule 23.12.2014
comment
@Kyll Ya, jika saya harus melakukan triknya, saya akan melakukannya, tetapi saya tidak ingin merender template blaze secara manual. Apa yang saya inginkan adalah pernyataan publikasi ini untuk tidak memperbarui klien secara reaktif dan juga tidak menghentikan fungsi publikasi (saya pikir jika saya menghentikan fungsi tersebut, saya akan menambahkan waktu tunggu kepada pengguna hingga dimulai kembali jika saya tidak salah ).   -  person em.rexhepi    schedule 23.12.2014
comment
Templat dapat dirender dengan array data yang sama, bukan dengan kursor? Jika Anda menginginkan informasi lebih lanjut tentang ini, kami perlu melihatnya.   -  person Kyll    schedule 23.12.2014
comment
Saya tidak begitu mengerti, bisakah Anda lebih spesifik dan menjelaskan kepada saya apa yang Anda sarankan. Maaf untuk kaum bangsawan.   -  person em.rexhepi    schedule 23.12.2014


Jawaban (1)


Jika Anda hanya perlu melakukan pengiriman data satu kali ke klien, menggunakan metode mungkin berhasil:

//Server
Meteor.methods({
  getSomePosts : function(limit)
  {
    check(limit, Number);
    return Posts.find({}, {limit : limit}).fetch();
  }
});

//Client
Meteor.call('getAllPosts', function(err, result) {
  //Do stuff with the result
});

Perhatikan bahwa ini akan membebani database Anda, Anda mungkin ingin menggunakan variabel dan memperbaruinya secara berkala daripada mengambil seluruh koleksi setiap kali klien memanggil metode tersebut.

Lebih lanjut tentang batasan ada di dokumen!

person Kyll    schedule 23.12.2014
comment
Terima kasih atas contoh metodenya. Dan terima kasih atas sarannya agar saya tidak mengirimkan seluruh postingan, contoh itu saya buat agar tidak rumit. Apakah ada cara untuk membatasi Meteor.publish() agar hanya mengembalikan kursor saat Meteor.subscribe() memanggil publikasi, hanya untuk menghilangkan reaktivitas? (Jika tidak, saya akan menggunakan metode tersebut) - person em.rexhepi; 23.12.2014
comment
Tentu, izinkan saya mengedit jawaban saya, Anda dapat menggunakan batas dengan kursor. - person Kyll; 23.12.2014
comment
Terima kasih atas pertanyaan mongo, saya tahu saya dapat menambahkan apa yang saya inginkan ke pertanyaan tersebut. Ada jawaban bagaimana saya bisa menghilangkan reaktivitas di Meteor.publish() kecuali cara Meteor.methods(). - person em.rexhepi; 23.12.2014
comment
Anda harus mengubah deklarasi Koleksi dan publikasi dengan cara yang sangat buruk. Periksa Meteor.Collection di dokumen. - person Kyll; 23.12.2014