gpt4 book ai didi

javascript - meteor :虽然尚未加载集合,但已显示模板

转载 作者:行者123 更新时间:2023-11-30 10:28:55 24 4
gpt4 key购买 nike

嗨,Meteor 的 friend 们!

请注意:我正在使用 Tom's router !

所以我试图只在 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() 放在哪里,或者换句话说:你们的代码模型是什么?

my console.log

我真的认为我的代码模型完全错误。那么如何根据路线(或者说:根据当前显示的模板)进行不同的订阅呢?

并且:你把 Deps.autorun() 放在哪里?在 router.add() 函数中?或者就在 (Meteor.isClient) 内部?

最佳答案

我认为 @user728291 的回答非常准确,我只是补充说 Meteor.subscribe 返回一个句柄,您可以使用它来检查准备情况:

保留对句柄的引用

Deps.autorun(function() {
stuffHandle = Meteor.subscribe(Session.get('bar'));
});

然后在你的模板中检查它:

{{#if stuffHandle.ready}}
...
{{/if}}

Template.barTemplate.helpers({stuffHandle: stuffHandle});

并通过 session 控制它:

'/myroute': function(bar) {
Session.set('bar', bar);
return 'barTemplate';
}

关于javascript - meteor :虽然尚未加载集合,但已显示模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com