我想在页面加载后尽快执行Meteor集合查询.我尝试的第一件事是这样的:
Games = new Meteor.Collection("games"); if (Meteor.isClient) { Meteor.startup(function() { console.log(Games.findOne({})); }); }
这不行,虽然(它打印“未定义”).在JavaScript控制台调用时,相同的查询工作几秒钟.我认为数据库准备好之前有一些滞后.那么我怎么知道这个查询会成功?
Meteor版本0.5.7(7b1bf062b9)在OSX 10.8和Chrome 25下.
解决方法
您应该首先从服务器发布数据.
if(Meteor.isServer) { Meteor.publish('default_db_data',function(){ return Games.find({}); }); }
在客户端上,只有在从服务器加载数据之后才执行集合查询.这可以通过在订阅呼叫中使用反应会话来实现.
if (Meteor.isClient) { Meteor.startup(function() { Session.set('data_loaded',false); }); Meteor.subscribe('default_db_data',function(){ //Set the reactive session as true to indicate that the data have been loaded Session.set('data_loaded',true); }); }
现在当您执行收集查询时,您可以检查数据是否已加载:
if(Session.get('data_loaded')){ Games.find({}); }
原文地址:https://www.jb51.cc/mssql/82352.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。