MeteorJS模板不显示数据,不出现

2024-02-16

我最初以为我的集合没有接收数据,但事实证明我只是在查询中出现了拼写错误。但我的数据仍然没有出现在屏幕上。 HTML 模板非常基本,如下所示:

<template name="messages" class=".messages">
        {{#each showMessages}}
            <blockquote>
                <p>{{message}}</p>
            </blockquote>
        {{/each}}
</template>

它应该只是在我调用 {{> messages}} 时显示消息集合 这是与之对应的客户端JS:

Meteor.subscribe("Messages");
    Template.messages.helpers({
        showMessages: function(){
            return Meteor.call("find");
        }
    });

这是服务器方法:

Meteor.methods({
      insert:function(username, message){
          var id = Messages.insert({
              'message': message,
              'user': Meteor.userId(),
              'username': username,
              'timestamp': new Date()
          });

          return "success";
      },
      'find': function(){
            return Messages.find({},{sort:{timestamp:-1}}, 20).fetch();
      }
  });

我对 MeteorJS 还很陌生,我昨天才刚学会它,所以这可能是我所缺少的一些非常基本的东西,但我已经为此努力了 2 个小时,并取得了 0 进展。我没有启用不安全或自动发布。这并不意味着是一个可用的产品或任何东西,我用它来自学,所以我知道我正在做一些不安全的事情。


在这种情况下,主要是对 Meteor 数据模型的误解。

尽管可以使用方法调用发送数据,但通常您需要使用出版物和订阅 https://docs.meteor.com/#/full/meteor_publish向客户端发送数据。这些具有查询几乎神奇的属性live- 也就是说,查询的任何更新都将自动发送到客户端。您当前的代码如果工作正常,将不会有实时数据。具体问题是Meteor.call是异步的,因此您的消息助手不会看到任何内容。

相反,这就是您想要做的。在服务器上,您将设置一个出版物消息集合:

Meteor.publish("someWeirdName", function() {
  return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});

请注意与您的代码的差异:没有fetch(),因为我们想要一个实时光标,并且20可能是您想要的限制选项。请注意,我也称之为someWeirdName因为那是的名字出版物,而不是您将用于在客户端上订阅的集合。如需更详细的解释,您可能想查看这个帖子 https://stackoverflow.com/a/18880927/586086.

然后,在客户端,您只需要以下内容:

Meteor.subscribe("someWeirdName");

Template.messages.helpers({
    showMessages: function(){
        return Messages.find();
    }
});

请注意,您之前的调用Meteor.subscribe("Messages")什么也没做,因为没有名为Messages。此外,我们将使用客户端消息缓存来创建光标来显示消息。

此外,所有这些代码都要求您在服务器和客户端上声明以下内容:

Messages = new Mongo.Collection("callMeWhateverYouWant");

另请注意,用于实例化此集合的参数与您在代码中引用该集合的方式无关,除非您正在编写一个定制出版物 https://stackoverflow.com/a/18880927/586086。它只是识别底层数据库中的集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MeteorJS模板不显示数据,不出现 的相关文章