流星订阅事件/渲染

Meteor subscribe on event/render

本文关键字:渲染 事件 流星      更新时间:2023-09-26

是否有一种方法来订阅流星当一个事件触发或模板被渲染?当这种情况发生时,我试图得到一个消息弹出并订阅所有用户名。

尝试:

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

:

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

都不工作,但有什么办法做到这一点,或者我必须使用不同的路线?

我试着理解为什么你想做订阅是这么晚的过程状态?

我建议你在IronRouter的waitOn属性中订阅。如果你使用waitOn属性来订阅路由中的所有用户,你只需要在弹出窗口中显示它们=)

流星7条原则中的第一条是:延迟补偿。在客户机上,使用预取和模型模拟,使它看起来像您拥有到数据库的零延迟连接。

来源:http://docs.meteor.com/sevenprinciples

希望这有帮助,亚历克斯

您可以尝试使用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.
}