当我运行时:
var vtop=Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;
console.log(vtop);
它出现了一个错误:“未捕获的TypeError:无法读取未定义的属性'created_at'”,但是当我在Web控制台上运行Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;
时,它会出现预期的结果。
答案 0 :(得分:0)
我会在该代码行中放置一个断点,并在您的JavaScript引擎即将运行时查看Posts集合中的内容。我的猜测是你的帖子集合在之后加载了文件,它遇到了那行代码。使用Web控制台检查时它的工作原因是因为文档已加载。
答案 1 :(得分:0)
在调用数据之前,您需要确保订阅完成。
流星数据是通过网络发送的,所以当你的javascript / html发送时,浏览器还没有被告知要从服务器下载数据。
这有两种方式:
如果您尚未进入舞台,则表示您正在使用自己的应用订阅,可以使用Deps.autorun
使用代表
Deps.autorun(function() {
var subscribed = Session.equals("subscribed",true);
if(!subscribed && Posts.find().count()) {
Session.set("subscribed",true);
var vtop = Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;
console.log(vtop)
}
或等待订阅完成
服务器js
Meteor.publish("posts", function() {
return Posts.find();
}
客户端js
Meteor.subscribe("posts",function() {
var vtop = Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;
console.log(vtop)
});
如果使用发布/订阅,您需要删除autopublish
包,但如果这样做,您还需要发布其他收藏集,否则浏览器将无法看到它们。
有关如何使用发布的详情,请参阅文档:http://docs.meteor.com/#publishandsubscribe
各方示例还使用发布并进行截屏视频:http://meteor.com/examples/parties