1

当我运行这个:

  var vtop=Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;
  console.log(vtop); 

它出现了一个错误:“Uncaught TypeError: Cannot read property 'created_at' of undefined”,但是当我Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;在 Web 控制台上运行时,它会出现预期的结果。

4

2 回答 2

0

我会在该行代码处设置一个断点,并在您的 JavaScript 引擎即将运行它时查看您的 Posts 集合中的内容。我的猜测是您的 Posts 集合在遇到该行代码正在加载文档。当您使用 Web 控制台检查时它起作用的原因是因为此时文档已被加载。

于 2013-04-05T02:24:20.800 回答
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

于 2013-04-05T07:36:46.773 回答