Подписка Meteor на событие / рендеринг

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

Пытался:

Template.newMessage.rendered = function(){
    Meteor.subscribe("allUsernames");
}

А также:

Template.layout.events({
    "click #new-message": function(e, t){
        $("#styledModal").modal();
        Meteor.subscribe("allUsernames");
    }
});

Ни то, ни другое не работает, каким-либо способом сделать это или мне нужно использовать другой маршрут? Я использую железный маршрутизатор


person Community    schedule 21.07.2014    source источник
comment
Я бы сказал, что то, что вы пытаетесь сделать, должно сработать. Как шаблон предоставляет информацию и как вы включаете данные в свой шаблон. Можете ли вы обновить / продлить свой пост?   -  person Jeanluca Scaljeri    schedule 22.07.2014


Ответы (2)


Я пытаюсь понять, почему вы хотите подписаться на такой поздней стадии процесса?

Я бы рекомендовал вам подписаться в свойстве waitOn в IronRouter. Если вы используете свойство waitOn для подписки на всех пользователей в пределах этого маршрута, вы можете просто отобразить их во всплывающем окне =)

Один из 7 принципов Meteor: Компенсация задержки. На клиенте используйте предварительную выборку и моделирование модели, чтобы все выглядело так, как будто у вас есть соединение с базой данных с нулевой задержкой.

источник: http://docs.meteor.com/#sevenprinciples

Надеюсь, это поможет, Алекс

person Ilinea    schedule 21.07.2014
comment
Похоже, вы сейчас немного противоречивы. Чтобы быть ясным: подписка на данные в методе waitOn в пакете железного маршрутизатора не приводит к предварительной выборке данных и, следовательно, не способствует компенсации задержки. - person Peppe L-G; 21.07.2014
comment
У меня есть кнопка нового сообщения на панели навигации, когда я нажимаю на нее, я хочу показать модальное окно с раскрывающимся списком, содержащим все имена пользователей пользователей, я не хочу подписываться на это на каждом маршруте. - person ; 21.07.2014
comment
Так что нет возможности подписаться на мероприятие, я не понимаю, почему это невозможно - person ; 22.07.2014
comment
@ theo3335796 Вы можете подписаться на публикацию в любом месте кода. Я думаю, вам нужно показать нам больше кода, чтобы мы могли понять, что не так. - person Peppe L-G; 22.07.2014

Вы можете попробовать сделать это с помощью Deps и Session (хотя ваш код тоже должен работать, может быть, у вас проблемы с публикациями?).

В вашем основном шаблоне отображаемой функции поместите это:

Template.layout.rendered = function() {
    Session.set('getAllUsers',false);
    Deps.autorun(function () {
        if(Session.get('getAllUsers' == true)
            Meteor.subscribe('allUsernames');
    })
}

Затем в шаблоне, открывающем список пользователей:

Template.newMessage.rendered = function(){
    Session.set('getAllUsers',true); //this should trigger Deps.autorun and subscribe.
}
person Andreas Fruth    schedule 22.07.2014
comment
Используйте Session.equals(key, value) вместо Session.get(key) == value (потенциально может привести к меньшему количеству повторных вычислений). Однако использование Session и Deps.autorun кажется ненужным сложным способом сделать это. - person Peppe L-G; 22.07.2014
comment
Все еще не работает, не уверен, в чем проблема. Следует ли мне сделать новое сообщение, чтобы обновить свой код? - person ; 24.07.2014
comment
проблема заключалась в том, что я использую selectize, и он загружался до завершения подписки, делая раскрывающийся список пустым, но теперь исправлено - person ; 24.07.2014