我正在学习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()创建一个数组,将结果放入变量但我无法做到...... 有谁知道我错过的那么简单?...
答案 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毫秒)