刷新 JavaScript 中的素数 gmap 标记
Refresh primefaces gmap markers in javascript
我需要刷新,添加新标记或删除素数gmap上的标记。通过callBackParam,我将标记传递给xhtml中的javascript。但是,当地图刷新时,永远不会触发事件叠加选择。ManageBean scope is viewScoped
public void ajaxPoll() {
Marker[] newMarkers = new Marker[mapLoadModel.getMarkers().size()];
for(int i=0;i < newMarkers.length;i++){
newMarkers[i]=mapLoadModel.getMarkers().get(i);
}
RequestContext.getCurrentInstance().addCallbackParam("newMarkers",new Gson().toJson(newMarkers));
logger.info("refresco marcadores");
}
javascript:
//<![CDATA[
function handleComplete(xhr, status, args){
var gmap = PF('gMapWV').getMap();
for(var i in gmap.markers)
{
gmap.markers[i].setMap(null);
}
gmap.markers.length=0;
var newMarkers = eval('(' + args.newMarkers + ')');
for(var i in newMarkers)
{
var newMarker = newMarkers[i];
var marker = new google.maps.Marker({
id: newMarker.id,
map: gmap,
position: newMarker.latlng,
icon:newMarker.icon,
title:newMarker.title,
clickable:true
});
}
}
// ]]>
和地图:
<p:poll interval="#{manageLoadExecution.refreshInterval}" listener="#{manageLoadExecution.ajaxPoll}" oncomplete="handleComplete(xhr, status, args)" process="@this" />
<p:gmap widgetVar="gMapWV" id="gMapWV" center="#{manageLoadExecution.latitude} , #{manageLoadExecution.longitude}" zoom="#{manageLoadExecution.zoomLevel}" fitBounds="false" type="terrain" model="#{manageLoadExecution.mapLoadModel}" disableDefaultUI="false" styleClass="map" >
<p:ajax event="overlaySelect" listener="#{manageLoadExecution.onMarkerSelect}" />
<p:gmapInfoWindow id="infoWindow" maxWidth="400" >
<p:outputPanel style="text-align: left; display: block; margin: auto; width:370px" >
刷新后,标记将显示在屏幕上,但 overlaySelect 事件永远不会触发,信息窗口也不会打开。
我想删除所有标记我正在删除一些使事件不触发的标记。
请帮忙!非常感谢。
我成功了!我错过了在javascript scriptlet中的新标记中添加id。最后,在javascript代码中,我调用_render()方法来配置标记和侦听器。
这是javascript脚本:
<script>
//<![CDATA[
function handleComplete(xhr, status, args){
var gmap = PF('gMapWV').getMap();
var newMarkers = eval('(' + args.newMarkers + ')');
for(var i in gmap.markers)
{
var oldMarker = gmap.markers[i];
var newMarker = newMarkers[i];
if(newMarker != null){
oldMarker.setPosition(newMarker.latlng);
oldMarker.title=newMarker.title;
oldMarker.setMap(gmap);
oldMarker.id=newMarker.id;
}else{
oldMarker.setMap(null);
}
}
var oldMarkersLength = gmap.markers.length;
var newMarkersLength = newMarkers.length;
for(var i = oldMarkersLength;i < newMarkersLength;i++)
{
var newMarker = newMarkers[i];
var marker = new google.maps.Marker({
position: newMarker.latlng,
title:newMarker.title,
clickable:true,
id:newMarker.id
});
gmap.markers[i]= marker;
}
PF('gMapWV').addOverlays(gmap.markers);
PF('gMapWV')._render();
}
// ]]>
</script>
如果列表减小了大小,我将剩余标记设置为 null 以重复使用,然后如果需要它。
我希望这可以帮助任何坚持使用 gmap 和 primeface 的人。
谢谢大家的建议
尝试这样做,它对我有用(对于那些不想刷新地图的人):
var gmap = PF('gmap').getMap();
var marker = new google.maps.Marker({
id: json.id,
map: gmap,
position: json.latlng,
icon: json.icon,
title: json.title,
draggable: true,
clickable:true
});
gmap.markers[gmap.markers.length] = marker;
PF('gmap').addOverlay(marker);
PF('gmap').configureMarkers();
PF('gmap').addOverlays(gmap.markers);
相关文章:
- 使用类从一个标记中双击事件
- 如何更改<svg>标记为<img>用js标记
- angular.js没有'无法在PhoneGap中处理视图标记
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 谷歌地图标记不会显示
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 铬:“;未捕获的语法错误:意外的标记:"
- 刷新 JavaScript 中的素数 gmap 标记
- 带有多个标记的 Gmap
- angular谷歌地图:如何在ui gmap标记中获取当前模型
- 我如何用多个标记做一个gmap v3,这些是可拖动的
- 如何从标记列表中获取gmap中的center
- 从gmap中添加/删除标记
- gmap将事件添加到标记中的链接中
- 如何在基本面上突出显示悬停时的gmap标记
- 无法刷新标记管理器(Gmap v3)
- 我怎么能得到标记id通过javaScript在Gmap
- 地图控制器中ui-gmap-marker的标记点击事件未触发