【发布时间】:2016-01-12 03:02:52
【问题描述】:
我认为问题出在路由上,但我在这里可能错了。
我有一个问题,我通过 Iron Router 调用的函数有时在模板呈现之前没有完全完成必要的计算,并且页面充满了 n/a 和 NaN(因为计算没有在模板之前完成加载或渲染)。所以发生的是用户登录后,他/她通过外部文件上传数据。然后将这些数据系统性地添加到现有的 MongoDB 集合中,然后由函数 computeValues() 进行计算。
如上所述,我的问题是,有时computeValues() 函数并未完全完成必要的计算,但模板仍会呈现。当我刷新此页面时,该过程按预期工作。只有当我从一个页面路由到这个特定的模板/页面(称为mainPage)时,才会存在此问题。然后,在其他情况下,它按预期工作,并且模板在函数执行并完全计算数据之前没有呈现。
这是 Iron Router 的特定代码:
Router.route("/analyze/main", {name: "main",
subscriptions: function(){
return Meteor.subscribe("data");
},
onBeforeAction: function(){
if(! Meteor.user()){
this.layout("accessDenied");
} else{
this.next();
}},
action: function(){
this.wait(computeValues());
if(this.ready()){
this.layout("mainPage");
} else{
this.layout("loading");
}
}});
这是我添加到模板的 onRendered() 函数中的内容:
Template.mainPage.onRendered(function(){
computeValues();
});
为模板添加或删除 onRendered 部分没有任何理由。问题仍然不时存在。我就是不知道是什么原因造成的,也不知道如何解决。
执行所有计算的特定函数computeValues() 位于 lib 文件夹中,因为需要加快加载过程并立即访问全局变量。我无法发布代码,因为它超过 3000 行。但是这个功能的广泛性并不能解释为什么它在路由时有 20% 的时间工作,而 80% 的时间不工作,而在 mainPage 模板上 100% 的时间工作并刷新以重新加载。
【问题讨论】:
标签: meteor