我已经将地图 api 包含到我的项目中。现在我想在我的地图上显示一些标记。我在启动函数中初始化我的地图:
Meteor.startup(function() {
...
var mapOptions = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
Map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
比我在渲染上设置地图的中心
Template.mapPostsList.rendered = function() {
var p2 = Session.get('location');
Map.setCenter(new google.maps.LatLng(p2.lat, p2.lng));
var marker = new google.maps.Marker({
position: new google.maps.LatLng(p2.lat, p2.lng),
title:'Meine Position'
});
marker.setMap(Map);
到目前为止,一切正常。尽管我有一个包含一些坐标的 PostCollection。我有发布和订阅功能。现在我想通过地图上的标记显示我的帖子。
我的第一个想法是在我的渲染函数中执行此操作。问题是在初始加载时没有显示任何帖子,因为我的 localcollection(clientside) 不包含任何帖子。从服务器加载帖子需要一些时间。
这就是我尝试构建辅助函数的原因。因为如果我的帖子中的某些内容发生变化,助手会自动重新加载。
Template.mapPostsList.helpers({
posts: function() {
var allPosts = Posts.find();
allPosts.foreach(function(post) {
create marker and attach it to the map
....
marker.setMap(Map);
})
现在的问题是,我的地图变量没有定义。有没有办法在全局范围内定义它?为什么我可以在渲染函数中使用我的 Map 变量?尽管我不喜欢我用辅助函数注入标记的方法,还是通常的方法?
有人可以给我提示如何完成我的问题吗?