如何在Meteor中为Google Map添加新标记?

时间:2014-04-18 06:31:50

标签: javascript google-maps google-maps-api-3 meteor

当我点击指定位置时,我正在谷歌地图上添加标记。这些标记目前既保存在Collection - Markers中,又保存到更经典的数组中。我现在想要的是在地图中添加新标记,因为它们是由其他用户添加的。

我的问题是:修改集合时是否有任何方法可以获得通知(例如,其他用户添加标记)?

也许这不是最好的方法。还有其他建议吗?

Rumors

if (Meteor.isClient) {

  Template.hello.rendered = function(){

    markersArray = [];
    var latlng = new google.maps.LatLng(46.123, 8.843);
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function (position) {
        latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
        map.setCenter(latlng);
      });
    }

    var opts = {
      zoom: 16,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map-canvas"), opts);

    // add a click event handler to the map object
    google.maps.event.addListener(map, "click", function(event)
    {
      placeMarker(event.latLng);
    });

    Session.set('map', true);

    function placeMarker(location) {

     var marker = new google.maps.Marker({
      position: location, 
      map: map
    });

     Markers.insert({"marker": location, "date": new Date()});
     markersArray.push(marker);
      }

}
}

2 个答案:

答案 0 :(得分:1)

你必须使用观察者

Template.hello.rendered = function(){


 Markers.find({}).observe({
  added: function (m) {

  // Add marker 

  }
 });
}

答案 1 :(得分:1)

根据上一个答案,你应该使用observe结构,但你真的需要避免让观察者永远运行:

Template.hello.rendered = function() {
    this.markerObserve = Markers.find({}).observe({
        added: function(m) {
            placeMarker(m.location)  // obviously depends on the structure of Markers documents
        }
    });
};

Template.hello.destroyed = function() {
    this.markerObserve.stop();
}