【问题标题】:Can't put data from a Meteor collection into an array无法将 Meteor 集合中的数据放入数组中
【发布时间】:2015-02-05 20:16:58
【问题描述】:

我正在学习 Meteor,我试图将 Collection.find() 的结果传递给数组(使用变量),我拥有的更简单的代码是(在根目录中的文件中):

    CalEvents = new Mongo.Collection('calevents');    //creating a collection 

/*------------------------- Populating the database with dummy data-------*/
    if (Meteor.isServer) {                            
    Meteor.startup(function () {
        if (CalEvents.find().count() === 0) {
          CalEvents.insert({
                title: "Initial room",
                start: '2010-02-02'
          });
        }
      });
    }
  /*--------------- Creating an array from the collection-----------------*/
    events = [];
    calEvents = CalEvents.find({});
    calEvents.forEach(function(evt){
        events.push({
            title: evt.title,
            start: evt.start,
        })
    });

该页面没有可显示的内容,但使用控制台我可以看到 (CalEvents.find().fetch()) 我的数据库中有数据,但“事件”变量为空... 我不明白为什么,因为我尝试了其他几件事,例如更改文件名和移动代码以保证正确的顺序。 而且我已经尝试使用 CalEvents.find().fetch() 创建一个数组并将结果放入一个变量中,但我无法做到...... 有谁知道我错过了什么如此简单?...

【问题讨论】:

    标签: meteor


    【解决方案1】:

    你使用自动订阅吗?

    您可能需要确保 sbscription 已准备就绪。请参阅Meteor: How can I tell when the database is ready?Displaying loader while meteor collection loads

    您确实在控制台中看到CalEvents.find().fetch() 返回项目的原因是,当您进行该调用时,订阅准备就绪。但是在您的events = []; ... 代码中(我假设它位于client 目录下的一个文件中,您可能假设订阅数据已经到达,而实际上它没有到达。

    一个有用的调试工具是 Chrome 的设备模式(DevTools 中搜索图标附近的“电话”图标),它可以让您模拟慢速网络(例如 GPRS,每个请求有 500 毫秒的延迟)。

    【讨论】:

    • 嗨,丹!是的,我有自动发布。我删除了它并将数组代码更改为在订阅中用作回调的函数内部,它起作用了!您是否认为使用 Iron Router WaitOn 和其他方法可以轻松处理此问题,或者...否则我们将不得不注意几乎所有的订阅不?谢谢!
    • 是的,iron:router 的 waitOn 使处理订阅更容易。我建议阅读understanding Meteor's publish/subscribetemplate-level subscriptions(在许多情况下甚至比 Iron:router 的方法更好)。另外,不客气,如果有用,请随时支持/接受答案,并记住选择比 user3481111 更具描述性的 StackOverflow 用户名:)
    • 你说得对,丹...似乎没有正确的名字我无法投票:( ...但我已经接受了你的回答(我认为)。再次感谢你,跨度>
    • @user3481111:看看tinyurl.com/so-username。这是有史以来最著名的 StackOverflow 用户 Jon Skeet 的帖子。
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 2017-05-15
    • 1970-01-01
    • 2016-08-22
    • 2021-12-10
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多