【问题标题】:Meteor collection returns no results except in template流星集合除了在模板中不返回任何结果
【发布时间】:2014-09-21 07:24:45
【问题描述】:

我是 Meteor 框架的新手,在访问模板之外的集合中的数据时遇到问题。
我有一个小型 mongo 集合,可以使用模板毫无问题地检索和呈现其数据。但是,当我尝试让游标或数组更直接地使用时,我没有返回任何结果。

在我的脚本中,使用 find

var dataFind = Fakedata.find(); console.log(dataFind); console.log(dataFind.count());

给出一个游标对象,但计数为零。

var dataFetch = Fakedata.find().fetch(); console.log(dataFetch); console.log(dataFetch.length);

给出一个空数组,长度为零。

在 JS 控制台中使用相同的 find() 或 fetch() 会提供填充对象,正如我希望上面的代码所做的那样。在一个流星模板中,一切似乎都运行良好,所以 pub/sub 似乎是正确的。

关于我在这里做错了什么的任何线索?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    在您尝试访问您的收藏数据时,您的订阅似乎不是 ready,这是一个常见问题。

    当您通过模板访问您的集合数据时,很可能是通过使用恰好是反应性的模板助手,因此当您的集合为 ready 时它们会重新运行,从而显示正确的数据。

    但在非响应式脚本中访问您的集合时,如果订阅尚未ready,它们将显示为空。

    您可以尝试在脚本中使用此模式,以便仅在订阅准备好时执行代码:

    Meteor.subscribe("mySubscription",function(){
      // we are inside the ready callback here so collection date is available
      console.log(Fakedata.find().fetch());
    });
    

    如果您正在寻找更稳健的方法,请尝试查看 iron:router waitOn 机制。

    【讨论】:

    • 这似乎是问题所在。我会研究一下 Iron:router 看看它是如何工作的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多