gpt4 book ai didi

javascript - 数据库项目有时不会显示在 Meteor.js 中

转载 作者:行者123 更新时间:2023-11-28 02:03:08 25 4
gpt4 key购买 nike

我在这里有一个用 Meteor 编写的简单应用程序:https://gist.github.com/drew-gross/6202629那是有问题的。当调用 Template.tab.ordered_drinks 函数时,没有找到 Tab(Tabs.find({}).fetch() 返回一个空数组),但只​​找到了大部分 Tab时间。有时选项卡在那里。我已检查它们是否存在于数据库中。

重现:

1) 运行应用程序。 (需要 meteor 路由器)

2) 在控制台上创建一个选项卡:Tabs.insert({owner:"foo"})

3) 尝试查看选项卡的页面:localhost:3000/tabs/:id

该页面会工作或不工作,看起来是随机的。为了进行确认,您可以在 .js 的第 9 行或第 19 行设置断点并执行 Tabs.find({}).fetch(),您有时会看到该选项卡,有时看不到该选项卡。

这看起来像是 Meteor 中的一个错误,但我想我应该先检查一下我是否做错了什么。

浏览器:Chrome 28 meteor 版本:发布0.6.4.1节点版本:v0.10.15

最佳答案

如果订阅尚未获取数据,则可能会出现此问题。

在meteor中,html/js被发送到客户端,然后渲染页面。同时客户端通过websockets/长轮询连接到服务器来检索mongo数据库。

因此有时您可以在数据库中没有任何内容的情况下渲染 html。

您只需要小心,使用 react 性来处理数据到达的时间,而不是假设数据已经存在,如下所示:

Template.tab.ordered_drinks = function () {
return Tabs.findOne(Session.get('tabId')).ordered_drinks;
};

如果 Tabs.findOne(Session.get('tabId'))null 因为客户端上还没有任何数据,则 .ordered_drinks 不会存在,您会在 chrome 控制台上收到错误,有时会看到/有时看不到该选项卡,具体取决于数据库是否已加载。

尝试更改下面的行以允许 Tabs.findOne(Session.get('tabId'))null 而不会引发错误。

Template.tab.ordered_drinks = function () {
var tab = Tabs.findOne(Session.get('tabId'));
return tab && tab.ordered_drinks;
};

此时正在加载。一旦数据到达,它就会使用选项卡 react 性地重新渲染这部分。

关于javascript - 数据库项目有时不会显示在 Meteor.js 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167640/

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