Javascript MeteorJS模板未显示数据,未显示
我原本以为我的收藏没有收到数据,但后来发现我的查询中有一个输入错误。但是我的数据仍然没有出现在屏幕上。HTML模板非常基本,如下所示: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
<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});
}