Javascript 铸铁路由器waitOn在镀铬中不起作用

Javascript 铸铁路由器waitOn在镀铬中不起作用,javascript,meteor,iron-router,Javascript,Meteor,Iron Router,由于Meteor的性质,Template..rendered在可以检索集合之前执行,因此我求助于Iron RouterwaitOn 这是在呈现页面之前等待启用播放列表。具有讽刺意味的是,它可以在Firefox和IE中使用,但在Chrome中却无法使用 Chrome控制台指出的错误是无法读取未定义的属性“uploadType”,这是有意义的,因为对象/集合无法在Chrome中加载 我应该怎么做才能遇到这种情况?仅供参考waitOn是这样的: //router.js this.route('vide

由于Meteor的性质,
Template..rendered
在可以检索集合之前执行,因此我求助于Iron Router
waitOn

这是在呈现页面之前等待启用播放列表。具有讽刺意味的是,它可以在Firefox和IE中使用,但在Chrome中却无法使用

Chrome控制台指出的错误是
无法读取未定义的属性“uploadType”
,这是有意义的,因为对象/集合无法在Chrome中加载

我应该怎么做才能遇到这种情况?仅供参考waitOn是这样的:

//router.js

this.route('videoPlayer',{
    path:'/video',
    waitOn: function(){
        return [Meteor.subscribe('videoPlaylist'), Meteor.subscribe('video')];
    }
});

即使在单一订阅期间,它也不起作用。

这不是一个bug,而是一种预期行为,iron router希望您实现某种“加载”,在定义路由器后添加这一行,waitOn将按照您的预期工作

Router.onBeforeAction("loading");

我不知道这是否对你有帮助。。。我也有同样的问题,但是当我在呈现模板之前重新加载需要数据对象的页面时,问题就出现了


当我在另一个页面上,只需单击一个链接(在您的例子中是这样的链接:
)即可进入该页面时,一切正常。但当我打开(在您的情况下)
/video
并重新加载页面时,您描述的错误就会出现在我的情况下。。。非常令人窒息和沮丧…

不知何故,这很奇怪。当我把这个添加到路线中时,它工作了(同样,记住在Chrome中它不工作,FF和IE的其余部分都很好。多么有趣的世界)

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

所以这让我怀疑waitOn是否足够做这项工作?

我以前也遇到过同样的问题,我从iron router的开发者那里找到了这段视频


对于TL;DW
Router.onBeforeAction(函数(暂停){
如果(!this.ready()){
这个。呈现(“加载”);
暂停();
}
});
Router.map(函数(){
返回此。路线('home'{
路径:“/”,
waitOn:function(){
return Meteor.subscribe('roomList');
},
行动:功能(){
这个。呈现(“家”);
}
});

});
您是否使用
Router.onBeforeAction(“加载”)激活了默认的
加载
挂钩?@saimeunt不。我应该在哪里添加它?据我所知,waitOn是用来保存渲染的。你可以把它放在你的全局路由器配置中。我认为这个问题可能是因为Chrome JS引擎比Firefox/IE更快,从而在收集数据仍然不可用的状态下触发了对代码的第一次有问题的评估。waitOn应该返回您要等待的订阅,但它需要默认的加载挂钩,该挂钩负责延迟呈现,直到数据准备就绪。我这样做了,但仍然保持不变。这对我的情况没有帮助。。。我也有同样的问题,使用Router.onBeforeAction('loading')。(是的,定义了加载模板)当您使用上述代码时,实际上不需要定义加载模板,它是一个加载模板,请尝试删除加载模板(或只是重命名它),看看它是否有效。@ErezHochman在Chrome中,即使在添加
onBeforeAction
之后,它也不起作用。为什么行为与IE和Firefox不同?那会很难看。我关心的是为什么不同浏览器的行为不一样。IE和firefox可以正常工作,但Chrome不行。真的吗?这对我有用吗?对我来说不是。。。我的路线中仍然有动作方法…我在路线中有waitOn和动作,然后它在Chrome中工作。我还有
route.onBeforeAction(“加载”)在映射声明之后。世界很奇怪,这很奇怪!我也使用waitOn和action(在这里做一个liik:),但它不起作用!有时我真的很讨厌流星…@ti汶ütten尝试添加“router.onBeforeAction”(“加载”)`。可能是因为这个原因。@timinuütten您是在路由器之后还是之前添加的。map?确切;你知道我做了什么(见上面我自己的答案)。关键是,在文档中,它说waitOn是在呈现之前等待集合准备就绪,在Firefox和IE中也是如此,但在Chrome中,它需要所有3种机制才能工作(waitOn、action、onBeforeAction)我肯定Chrome有问题。好吧,我最后的猜测是确保你将“暂停”参数传递到“onBeforeAction”,如果子组件没有准备好,则暂停操作,直到它准备好。当它准备好了,然后呈现你的模板。抱歉,如果这样做没有帮助,我只是提出建议,而且我在手机上,所以我无法正确键入上述代码。@user4043200是的,它可以工作,但你必须用这三种方法才能在Chrome中工作。