无法将Meteor集合中的数据放入数组中

时间:2015-02-05 20:16:58

标签: meteor

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

    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())我的数据库中有数据,但“events”变量为空... 我无法理解为什么,因为我尝试了其他一些事情,比如更改文件名和移动代码以保证正确的顺序。 我已经尝试使用CalEvents.find()。fetch()创建一个数组,将结果放入变量但我无法做到...... 有谁知道我错过的那么简单?...

1 个答案:

答案 0 :(得分:0)

您使用自动订阅吗?

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

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

一个有用的调试工具是Chrome的设备模式(&#34;电话&#34; DevTools搜索图标旁边的图标),可让您模拟慢速网络(例如GPRS,每个请求延迟500毫秒)