铁路由器数据触发3次

时间:2014-08-21 17:33:11

标签: meteor iron-router

我在Router.Config

上设置了一个带有loding模板的路由
Router.onBeforeAction('loading');
this.route('clients', {
    path: '/clients',
    template: 'clientsAll',
    waitOn: function () {
        return Meteor.subscribe('clientsAll');
    },
    data: function () {
        if (this.ready()) {
            console.log("Data");
            return Clients.find().fetch();
        }
    }
});

一切正常,它在渲染模板之前显示加载模板,但在日志中显示数据被触发两次。

1 个答案:

答案 0 :(得分:3)

这是一种正常行为,data就像大多数路径方法在反应计算中运行一样。

data方法中,您依赖于this.ready()恰好是被动数据源(它返回waitOn返回的等待列表的状态)。

所以基本上就是这样:

  • 您的数据方法被声明为计算,最初以this.ready()运行,返回false。
  • 您等待的订阅在将来某个时间准备就绪,因此this.ready()现在返回true并重新运行data方法。

这不是问题,因为data方法通常不会计算量大(它们只返回客户端本地可用的一些数据)。