我有服务器和客户端文件,正在尝试将一些数据发送到Javascript而不是模板。在模板中,我可以输出一些值,但我需要在 JS 中使用它来向 Leaflet 添加标记。
我想,通过模板将数据汇集到JS和Leaflet中是没有意义的,对吧?
我做错了什么?
壳
$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use atms
switched to db atms
> db.markers.count()
1868
运行服务器:
$ MONGO_URL=mongodb://127.0.0.1:27017/atms meteor
库/集合.js
Markers = new Meteor.Collection('markers');
在客户端/客户端.js中,我尝试从集合中获取记录,但它是空的:
Template.hello.helpers({
marks: function () {
// this data renders correctly on map
return Markers.findOne({})
}
});
Template.hello.onRendered(function() {
// this data is empty in console
var query = Markers.find().fetch();
console.log(query);
});
在模板中,它显示一条记录,这意味着连接有效。但是控制台输出是[]
.
主要问题是客户端和服务器上有 2 个不同的Markers
集合。因此,在客户端上,meteor
访问客户端标记集合,并且不显示任何数据。集合定义应在客户端和服务器之间共享,而不是重复。
创建一个文件夹lib
并将集合定义放在那里
//lib/collections.js
Markers = new Mongo.Collection('markers')
并删除server
和client
文件夹中的集合定义。
另外,请注意,当您使用分离的mongo
实例时,反应性将非常缓慢(与嵌入式mongo
相比是 2 或 3 倍)
很确定这在这里得到了回答:
将多个Mongodb数据库与Meteor一起使用.js
只是关于语法的注释,在版本 1.2.1 中,您希望将 Meteor 集合声明为全局变量,以便可以在您键入的文件之外访问它。 此外,您希望将此行放在/lib 或客户端和服务器都可以访问的目录中。
Markers = new Mongo.Collection('markers')