Метеоритная подписка не обновляется, несмотря на WaitOn

Я использую Iron Router. У меня есть RouterController, который выглядит примерно так:

var loggedInUserController = RouteController.extend({
    layoutTemplate: "GenericLayout",
    waitOn: function () {
        return Meteor.subscribe("TheDataINeed");
    }
});

И у меня есть определенный маршрут, который использует этот контроллер для ожидания 'TheDataINeed':

Router.route("/myapp", {
    name: "Landing",
    controller: loggedInUserController,
    data: function () {
        if(this.ready()){
            return {content: "page-landing"};
        }
    }
});

Теперь проблема в том, что данные, на которые я подписан, условны: это означает, что в зависимости от роли пользователя я публикую разные данные, например:

   if (!Roles.userIsInRole(this.userId, 'subscribed') ) {
        return [
            myData.getElements({}, { fields: { _id: 1, title: 1}, limit: 5 })
        ];
    } else {
        return [
            myData.getElements({}, { fields: { _id: 1, title: 1} })
        ];
    }

Когда роль пользователя не "подписана", я ограничиваю публикуемые данные 5 элементами.

Проблема заключается в том, что публикация не реагирует, поэтому, когда пользователь в первый раз меняет свою роль на "подписан" и я перехожу к своему маршруту ("/myapp"), пользователь все равно видит ограниченное количество элементов вместо всех.,

Есть ли способ вручную повторно активировать подписку, когда я загружаю этот маршрут? Если возможно, я бы хотел сделать это без добавления новых пакетов в мое приложение.

1 ответ

Не уверен насчет такого подхода, но вы можете попытаться установить значение сеанса в маршруте вместо кода подписки. Затем в файл на стороне клиента, где ваши подписки вы можете обернуть Meteor.subscribe("TheDataINeed") в Tracker.autorun и иметь сеанс в качестве параметра подписки. Каждый раз, когда значение сеанса изменяется, автозапуск перезапускает подписку и возвращает вам данные на основе нового значения.

Другие вопросы по тегам