2014-01-29 103 views
1

我有一定的困难,找出如何使用gmaps.jsgmaps.js触发信息窗口

我的地图初始化如下触发指定的信息窗口:

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

我renderMarkers基本功能执行一个AJAX调用一个PHP脚本,查询数据库,并返回结果集,并返回一系列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 
    }) 

} 

我刷新/重新渲染标记s作为客户端通过使用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

我是在说,我应该能够使用该目标来更正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'); 
+0

谢谢。完美工作。 – Zam

4

每个标记添加到Gmaps.map intance有它自己的信息窗口存入标记对象。我们需要该数组索引键给那个特定的标记。通过索引键调用右边的InfoWinow o打开。您可以通过执行以下打开GMaps.js特异性标志物:

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

更换[指数]通过您想要的信息窗口打开标记索引。

+0

工作正常,但你能告诉如何关闭除索引以外的所有其他infowidow? – Jinandra

+0

嗨@AmitSingh,关闭所有infowindows,你可以循环所有的infoWindows并调用'close()'函数。您可以随时在ex上添加自定义检查。索引... –