铁路由器waitOn在Chrome中不起作用

时间:2014-09-21 01:36:19

标签: javascript meteor iron-router

由于流星的性质,在检索集合之前执行的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')];
    }
});

即使在单一订阅期间也无效。

4 个答案:

答案 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');
    }
  });
});