2012-11-17 16 views
6

Potrzebuję wykonać określone zadanie renderowania, gdy kolekcja zakończy ładowanie na kliencie. Jaka jest najlepsza strategia, aby wiedzieć, kiedy dane są dostępne w kolekcji na kliencie.Meteor.js Skąd wiadomo, że moja kolekcja jest gotowa na kliencie?

Doszedłem z tego rozwiązania:

Meteor.subscribe('alldrawings', myRendering); 

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

Czy w ten sposób to zrobić? Czy istnieje zalecana metoda inna niż ta?

Odpowiedz

2

Możesz oczywiście skorzystać z funkcji oddzwaniania subskrypcji. AFAIK, to jedyny możliwy sposób na wykrycie, czy subskrypcja została całkowicie zaktualizowana.

Inną opcją jest użycie obserwatora z kursorem kolekcji: http://docs.meteor.com/#observe. Sądzę jednak, że obserwatorzy są nazywane stale, jeden po drugim, ponieważ dane docierają, a nie jeden raz po ukończeniu (tylko).

3

Można skonfigurować zmienną reaktywny siebie:

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) 
}); 

A jeśli chcesz mieć zbiór i szablon gotowy, użyj tego:

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

     // Do some DOM manipulations based on the data 
    }); 
} 
Powiązane problemy