Pertanyaan Meteor.js Bagaimana saya tahu koleksi saya siap di klien


Saya perlu melakukan tugas render tertentu ketika Koleksi telah menyelesaikan bebannya pada klien. Apa strategi terbaik untuk mengetahui kapan data tersedia di Koleksi pada klien.

Saya telah menemukan solusi ini:

Meteor.subscribe( 'alldrawings', myRendering );

function myRendering(){
  //do some no-markup stuff with the data
  //(i'm creating canvas objs and drawing on them)
}

Apakah ini cara melakukannya? Apakah ada metode yang direkomendasikan selain ini?


6
2017-11-17 03:18


asal


Jawaban:


Anda dapat mengatur sendiri variabel reaktif:

alldrawingsReady = new ReactiveVar(false);

Meteor.subscribe('alldrawings', function() {
    alldrawingsReady.set(true);
});

Tracker.autorun(function(){
    if(!alldrawingsReady.get()) {
        return;
    }

    // Do some no-markup stuff with the data
    // (eg. creating canvas objs and drawing on them)
});

Dan jika Anda perlu memiliki koleksi dan template siap, gunakan ini:

Template.my_template.rendered = function() {
    this.autorun(function(){
        if(!alldrawingsReady.get()) {
            return;
        }

        // Do some DOM manipulations based on the data
    });
}

3
2018-01-03 12:34



Anda tentu saja dapat menggunakan callback berlangganan. AFAIK, ini adalah satu-satunya cara yang mungkin untuk mendeteksi, jika langganan diperbarui sepenuhnya.

Pilihan lain adalah menggunakan pengamat dengan kursor koleksi: http://docs.meteor.com/#observe. Tapi saya pikir para pengamat dipanggil terus-menerus, satu demi satu, ketika data tiba, dan tidak satu kali pun selesai (hanya).


2
2017-11-17 22:18