嗨,流星朋友们!
请注意:我使用的是汤姆的路由器!
所以我试图只在 mongo 集合准备好时显示我的模板,但由于某种原因它不起作用!:(
我首先关注了这个帖子:LINK
所以我在 server.js 中有我的发布函数,我在我的路由器中订阅了这些函数,所以这里没有涉及到 Deps.autorun() (顺便说一句:这是正确的方法吗?Deps.autorun() 对我不起作用):
所以我有类似的东西:
'/myroute': function(bar) {
Meteor.subscribe("myCollection", bar, function() {
Session.set('stuffLoaded', true);
});
return 'stuffPage';
}
在显示从“myCollection”加载的数据的模板中,我将有如下内容:
<template name="stuffPage">
{{#if stuffLoaded}}
<!-- Show the stuff from the collection -->
{{else}}
<p>loading!</p>
{{/if}}
</template>
出于某种原因“加载!” 从不显示。此外,在几毫秒内,将显示上次显示相同模板时的“旧数据”(但为发布功能提供了另一个“条形”值 --> 不同的数据)。
这当然不好,因为用户可以在几毫秒内看到旧数据,然后突然出现新数据。为了避免这种“闪光”,我想显示“正在加载!” 直到新数据再次加载:这对我不起作用!:-(
我究竟做错了什么?
提前感谢您的帮助!
编辑:
好的,@user728291 提供的第一篇文章中的答案问题如下:
由于某种原因,路由器的东西在 Deps.autorun() 之后被调用......这里有什么问题?:( (请注意:eventsLoaded == stuffLoaded。)你们把你的 Deps.autorun() 放在哪里订阅或者换句话说:你的代码模型是什么?
实际上,我真的认为我的代码模型完全是错误的。那么如何根据路由(或者换句话说:基于当前显示的模板)进行不同的订阅?
AND:你把 Deps.autorun() 放在哪里?在 router.add() 函数内部?还是就在 (Meteor.isClient) 内部?