iron-router在渲染之前等待Collection.findOne()作为数据对象

时间:2014-04-13 02:26:14

标签: meteor iron-router

我正在寻找一种解决方案,铁路由器在渲染之前正在等待我的集合上的成功查找方法。

我的路线如下:

this.route('business', {
        path : '/business/:type/:_id',
        waitOn : function () {
            return Meteor.subscribe('business', this.params._id);
        },
        data : function () {
            return Business.findOne({_id: this.params._id});
        }
    });

这很好用。铁路由器似乎在等待Collection的订阅,以便为客户端获取正确的文档。但是我在模板中需要的数据会延迟findOne函数。

Template.businessItemItem.rendered = function () {
    console.log(Router.current().data()); // undefined
    window.setTimeout(function(){
      console.log(Router.current().data()); // [Object]
    }, 1000);
}

解决方案 对于每个有同样问题的人。只需添加"操作"您的路线的方法如下:

action : function () {
   if (this.ready()) this.render();
}

使用这种方法一切正常。

1 个答案:

答案 0 :(得分:2)

我不确定我是否会遇到您的问题,但如果我这样做,您应该阅读Controlling subscriptions,尤其是Router.onBeforeAction('loading')。现在,你正在重新发明轮子。