为什么这段代码显示"0"?它不应该返回"1"?
Messages = new Meteor.Collection("messages");
if (Meteor.is_client) {
Meteor.startup(function () {
alert(Messages.find().count());
});
}
if (Meteor.is_server) {
Meteor.startup(function () {
Messages.insert({text: "server says hello"});
});
}
Run Code Online (Sandbox Code Playgroud)
如果我稍后执行"Messages.find().count()",则返回1.
deb*_*lis 37
默认情况下,当Meteor客户端启动时,它会连接到服务器并订阅Meteor.Collection您定义的任何文档.这需要一些时间才能完成,因为在建立服务器连接和接收文档时总会有一些延迟.
Meteor.startup()在客户端上很像$()jQuery - 它在客户端DOM准备好后运行它的参数.它不是等待客户的集合,以获得他们的服务器上的所有文件.所以你编写代码的方式,调用find()总是会过早运行并返回0.
如果要等到第一次从服务器下载集合之后再运行代码,则需要使用Meteor.subscribe()显式订阅集合. subscribe()接受将在客户端上的初始文档集时运行的回调.
看到: