2014-04-08 15 views
10

Pracuję nad aplikacją przy użyciu funkcji komentarza. Powoduje to konieczność subskrybowania zarówno kolekcji, do której komentarze są wysyłane, jak i samego zbioru komentarzy. Teraz wygląda to tak:Wiele subskrypcji w żelaznym routerze

<template name="bookView"> {{> book}} {{> comments}} </template>

this.route('book', { 
    path: '/book/:_id', 
    template: 'bookView', 
    waitOn: function() { return Meteor.subscribe('book');}, 
    action: function() { 
     if (this.ready()){ 
      this.render(); 
     } 
     else 
      this.render('loadingTemplate'); 
    }, 
    data: function() {return Books.findOne(this.params._id);} 
}); 

Ale teraz chciałbym, aby załadować wszystkie komentarze należące do tej książki również. Czy powinienem obsłużyć subskrypcję komentarzy w Template.comments.rendered?

Odpowiedz

27

Tak, masz dwa sposoby:

Logika w kontrolerze. Możesz zasubskrybować tablicę do wielu kolekcji. To byłby sposób, w jaki natychmiast wyświetlisz wszystkie komentarze.

this.route('book', { 
     path: '/book/:_id', 
     template: 'bookView', 
     /* just subscribe to the book you really need, change your publications */ 
     waitOn: function() { 
     return [Meteor.subscribe('book', this.params._id), 
       Meteor.subscribe('comments', this.params._id)]; 
     }, 
     data: function() { 
     return { 
     book : Books.findOne(this.params._id), 
     comments: Comments.find(this.params._id)} 
     } 
    }); 

Jeśli nie chcesz wyświetlać komentarzy, dopóki nie zostaną o to poproszone przez użytkownika. Możesz postępować w inny sposób:

Możesz ustawić bookId na buttonclick na zmienną Sesji. Następnie można zdefiniować funkcję Deps.autorun, która subskrybuje kolekcję komentarzy z bookId podaną w zmiennej Session. W szablonie komentarzy wystarczy wykonać zwykłą prośbę o zbieranie. Jeśli potrzebujesz więcej wskazówek na ten temat, daj mi znać.

+0

Mam ten sam problem i pewne problemy z danymi, które są przetwarzane i renderowane za pomocą mechanizmu renderującego meteor 0.8, zanim trafi on do klienta. Jak mogę sprawdzić, czy subskrypcje przebiegły pomyślnie? – Tobi

+0

Funkcja waitOn zawsze czeka aż dane zostaną odebrane. Zatem twoja zasada powinna zawsze się udać. – chaosbohne

+0

Jak uzyskać dostęp do danych książki z zdarzeń tempalate? – Sysrq147

5

Twoja funkcja waitOn może czekać na wiele subskrypcji, zwracając tablicę uchwytów subskrypcji.

Powiązane problemy