Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MeteorJS模板未显示数据,未显示_Javascript_Html_Mongodb_Web Applications_Meteor - Fatal编程技术网

Javascript MeteorJS模板未显示数据,未显示

Javascript MeteorJS模板未显示数据,未显示,javascript,html,mongodb,web-applications,meteor,Javascript,Html,Mongodb,Web Applications,Meteor,我原本以为我的收藏没有收到数据,但后来发现我的查询中有一个输入错误。但是我的数据仍然没有出现在屏幕上。HTML模板非常基本,如下所示: <template name="messages" class=".messages"> {{#each showMessages}} <blockquote> <p>{{message}}</p> </block

我原本以为我的收藏没有收到数据,但后来发现我的查询中有一个输入错误。但是我的数据仍然没有出现在屏幕上。HTML模板非常基本,如下所示:

<template name="messages" class=".messages">
        {{#each showMessages}}
            <blockquote>
                <p>{{message}}</p>
            </blockquote>
        {{/each}}
</template>
下面是服务器方法:

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还很陌生,我昨天刚开始学习,所以我可能错过了一些非常基本的东西,但我已经花了两个小时来讨论这个问题,并且已经取得了0的进展。我没有启用不安全或自动发布。这不是一个有用的产品或任何东西,我用它来教自己,所以我知道我在做一些不安全的事情

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

虽然可以使用方法调用发送数据,但通常您希望使用将数据发送到客户端。它们具有几乎神奇的特性,即查询是实时的——也就是说,对查询的任何更新都将自动发送到客户端。当前的代码如果工作正常,就不会有实时数据。具体的问题是,
Meteor.call
是异步的,因此您的消息助手不会看到任何东西

相反,这里是你想要做的。在服务器上,您将设置邮件集合的发布:

Meteor.publish("someWeirdName", function() {
  return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});
请注意与您的代码的区别:没有
fetch()
,因为我们需要一个活动光标,
20
可能就是您想要的限制选项。请注意,我还将其命名为
someWeirdName
,因为这是出版物的名称,而不是用于在客户端订阅的集合。要获得更详细的解释,您可能需要查看

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

Meteor.subscribe("someWeirdName");

Template.messages.helpers({
    showMessages: function(){
        return Messages.find();
    }
});
请注意,您以前调用的
Meteor.subscribe(“Messages”)
没有任何作用,因为没有名为
Messages
的出版物。此外,我们还将使用消息的客户端缓存创建一个游标来显示消息

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

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

还请注意,用于实例化此集合的参数与您在代码中引用集合的方式无关,除非您正在编写。它只是标识基础数据库中的集合。

调用方法是异步的,因此在助手中返回结果不会有任何好处。 类似地,fetch也不是被动的

showMessages: function(){
  return Messages.find({},{sort:{timestamp:-1}, limit: 20});
}

在做你自己的项目之前,继续阅读《发现流星》。我都是为了努力教自己一些新的东西,但是一个坚实的基础会创造奇迹并消除很多挫折。 我已经为这些开始的问题准备了一些记事本。您可以在这里找到一些初步说明

祝你好运
汤姆

除非他发布一些东西给
信息
,否则我认为这不会有任何作用,正如我试图描述的那样:)哦,该死,你说得对,我认为他已经发布了一些东西。哦,当你这样写的时候,这很有意义。我对什么是发布有了初步的了解,但直到现在我才真正理解如何将其应用到应用程序中。非常感谢!
showMessages: function(){
  return Messages.find({},{sort:{timestamp:-1}, limit: 20});
}