gmaps.js触发infoWindow

时间:2014-01-29 06:55:16

标签: javascript google-maps google-maps-api-3 gmaps.js

我在使用gmaps.js找出如何触发指定的infoWindow时遇到了一些困难

我的地图初始化如下:

map = new GMaps({
    div: '#map-canvas'
});
renderMarkers();

我的renderMarkers函数基本上执行对PHP脚本的AJAX调用,该脚本查询数据库并返回结果集,并返回一系列addMarker调用,如下所示:

LOOP THROUGH RESULT SET {

    map.addMarker({
        lat: marker.SiteLatitude, 
        lng: marker.SiteLongitude,
        infoWindow: {
           content: marker.contentHTML,
           closeclick: function(e) {
               $("#customer-details-container").hide();
           }
       },
       icon: marker.iconPath,
       id: marker.MyID
   })

}

我刷新/重新渲染标记,因为客户端使用map.removeMarkers()触发对底层数据库的更新,然后触发我的renderMarkers()函数。当标记在地图上重绘时,如果用户打开了infoWindow,我想触发它​​打开。

我不确定如何根据特定ID触发infoWindow。举个例子,让我们说一个标记设置如下:

    map.addMarker({
        lat: 102.325 
        lng: -67.524,
        infoWindow: {
           content: "<div>test!</div>"
           closeclick: function(e) {
               $("#customer-details-container").hide();
           }
       },
       icon: "image/marker.png",
       id: 1234
   })

我是否正确地说我应该能够使用ID = 1234来定位它?例如:

google.maps.event.trigger(markers[1234], 'click');

...

我不确定使用gmaps.js执行此操作的具体语法

任何帮助都非常感谢:D

2 个答案:

答案 0 :(得分:4)

添加到Gmaps.map intance的每个标记都有自己的InfoWindow存储在markers对象中。我们需要该特定标记的Array索引键。通过索引键的地址可以打开正确的InfoWinow。您可以通过执行以下操作打开GMaps.js特定标记:

(map.markers[index].infoWindow).open(map.map,map.markers[index]);

将[index]替换为您希望InfoWindow打开的标记的索引。

答案 1 :(得分:2)

我是否正确地说我应该能够使用该ID = 1234来定位它?

我不这么认为。文档非常不完整,在gmaps.js中我找不到任何具有通过属性访问标记的功能。

但你可以扩展原型:

GMaps.prototype.markerById=function(id){
  for(var m=0;m<this.markers.length;++m){
    if(this.markers[m].get('id')===id){
      return this.markers[m];
    }
  }
  return new google.maps.Marker();
}

用法:

google.maps.event.trigger(map.markerById(12345), 'click');