Несколько подписей в железном маршрутизаторе

Я работаю над приложением, используя функцию комментариев. Это приводит к необходимости подписываться как на коллекцию, в которую сделаны комментарии, так и на коллекцию комментариев. Теперь это выглядит так:

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

Но теперь я хотел бы загрузить все комментарии, принадлежащие этой книге. Или я должен обрабатывать подписку на комментарии в Template.comments.rendered?

Ответ 1

Да, у вас есть два пути:

Логический контроллер. Вы можете подписаться с массивом на несколько коллекций. Это будет так, как вы пойдете, когда вы немедленно покажете все комментарии.

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

Если вы не хотите показывать комментарии до тех пор, пока пользователь не запросит их. Вы можете следовать по-другому:

Вы можете установить bookId на buttonclick в переменную сеанса. Чем вы можете определить функцию Deps.autorun, которая подписывается на коллекцию комментариев с помощью bookId, предоставленной в вашей переменной сеанса. В вашем шаблоне комментариев вам просто нужно выполнить обычный запрос коллекции. Если вам нужно больше советов по этому поводу, дайте мне знать.

Ответ 2

Функция waitOn может ждать нескольких подписей, возвращая массив дескрипторов подписки.