由于流星的性质,在检索集合之前执行的Template.<name>.rendered
,我使用了Iron-Router waitOn
。
这是在呈现页面之前等待播放列表启用。它适用于Firefox和IE(具有讽刺意味),但从不在Chrome中使用。
Chrome控制台指出的错误是Cannot read property 'uploadType' of undefined
,因为对象/集合无法在Chrome中加载,因此这是有道理的。
我该怎么做才能遇到这个?仅供参考,waitOn是这样的:
//router.js
this.route('videoPlayer',{
path:'/video',
waitOn: function(){
return [Meteor.subscribe('videoPlaylist'), Meteor.subscribe('video')];
}
});
即使在单一订阅期间也无效。
答案 0 :(得分:0)
它不是一个错误,而是一个预期的行为,铁路由器希望你实现&#34; loading&#34;在某种情况下,在定义路由器后添加此行,waitOn将按预期工作。
Router.onBeforeAction("loading");
答案 1 :(得分:0)
我不知道这是否对你有帮助...我遇到了同样的问题,但是当我在渲染模板之前重新加载我需要数据对象的页面时,问题就出现了。
当我在另一个页面上并通过单击链接(在您的情况下是这样的链接:<a href="{{pathFor 'videoPlayer'}}">Videos</a>
)进入页面时,一切正常。但当我(在您的情况下)/video
并重新加载页面时,您所描述的错误出现在我的案例中......非常严厉和令人沮丧......
答案 2 :(得分:0)
不知怎的,这很奇怪。它的工作原理(再次,记得在Chrome中它没有工作,其余的FF和IE很好。这是一个多么有趣的世界)当我把它添加到路线时。
action : function () {
if (this.ready()) {
this.render();
}
}
所以这让我觉得isnt waitOn
应该足以完成这项工作了吗?
答案 3 :(得分:0)
之前我遇到过同样的问题,我发现了这个来自铁路由器EventedMind的开发者的视频
对于TL; DW
Router.onBeforeAction(function(pause) {
if (!this.ready()) {
this.render('Loading');
pause();
}
});
Router.map(function() {
return this.route('home', {
path: '/',
waitOn: function() {
return Meteor.subscribe('roomList');
},
action: function() {
this.render('home');
}
});
});