2014-04-08 16 views
10

Ho lavorato a un'applicazione utilizzando una funzione di commento. Ciò comporta la necessità di sottoscrivere sia una raccolta su cui sono fatti i commenti sia la stessa raccolta di commenti. Ora sembra che questo:Abbonamenti multipli nel router di ferro

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

Ma ora vorrei caricare tutti i commenti che appartengono a quel libro anche. O dovrei gestire la sottoscrizione di commenti in Template.comments.rendered?

risposta

27

Sì, ci sono due modi:

Logic in Controller. Puoi iscriverti con un array a più raccolte. Questo sarebbe il modo in cui andrai quando mostrerai tutti i commenti all'istante.

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

Se non si desidera visualizzare i commenti finché non vengono richiesti dall'utente. È possibile seguire un altro modo:

È possibile impostare bookId su buttonclick in una variabile di sessione. Quindi è possibile definire una funzione Deps.autorun che sottoscrive la raccolta di commenti con lo bookId fornito nella variabile Sessione. Nel tuo modello di commenti devi solo fare la normale richiesta di raccolta. Se hai bisogno di altri suggerimenti su questo modo fammi sapere.

+0

Ho lo stesso problema e alcuni problemi con i dati che vengono analizzati e resi con il renderer meteor 0.8 prima che sia sul client. Come posso verificare se gli abbonamenti hanno avuto successo? – Tobi

+0

La funzione waitOn attende sempre finché i dati non vengono ricevuti. Quindi la tua sottoscrizione dovrebbe sempre avere successo. – chaosbohne

+0

Come accedere ai dati del libro dagli eventi temporali? – Sysrq147

5

La funzione waitOn può attendere più abbonamenti restituendo un array degli handle di sottoscrizione.

Problemi correlati