简体   繁体   English

如何创建可拖动标记?

[英]How to create a draggable marker?

Code below it's able to create a marker. 下面的代码可以创建标记。

But I want to create a draggable marker, problem is that is not sending the click event to the server after the marker has been created. 但是我想创建一个可拖动标记,问题是在创建标记后没有将click事件发送到服务器。

When the markes is created the draggable flag is set to true. 创建标记时, 可拖动标记设置为true。

Any ideas? 有任何想法吗?

<p:gmap id="gmap" center="36.890257,30.707417" zoom="13" type="HYBRID"

style="width:600px;height:400px"
model="#{mapBean.emptyModel}"
onPointClick="handlePointClick(event);"
widgetVar="map">
<p:ajax event="markerDrag" listener="#{mapBean.onMarkerDrag}" update="messages" />
</p:gmap>

<p:dialog widgetVar="dlg" effect="FADE" effectDuration="0.5" close="false" fixedCenter="true">
<h:form prependId="false">
<h:panelGrid columns="1">
<h:outputLabel value="Are you sure?"/>


<f:facet name="footer">
<p:commandButton value="Yes"
actionListener="#{mapBean.addMarker}"
update=":messages"
oncomplete="markerAddComplete()"/>
<p:commandButton value="Cancel" onclick="return cancel()"/>
</f:facet>
</h:panelGrid>

<h:inputHidden id="lat" value="#{mapBean.lat}"/>
<h:inputHidden id="lng" value="#{mapBean.lng}"/>
</h:form>
</p:dialog>

<script type="text/javascript">
var currentMarker = null;

function handlePointClick(event) {

console.log("click event");

console.log(event.marker);

if (currentMarker == null) {
document.getElementById('lat').value = event.latLng.lat();
document.getElementById('lng').value = event.latLng.lng();

currentMarker = new google.maps.Marker({
position: new google.maps.LatLng(event.latLng.lat(), event.latLng.lng())
});

map.addOverlay(currentMarker);

dlg.show();
}
}

function markerAddComplete() {
//currentMarker = null; Only one can be added.
dlg.hide();
}

function cancel() {
dlg.hide();
currentMarker.setMap(null);
currentMarker = null;

return false;
}
</script>

Problem was being caused with the attribute onPointClick of p:gmap . p:gmap的 onPointClick属性引起了问题。 This is a Javascript Callback to the function handlePointClickEvent() in this case. 在这种情况下,这是对函数handlePointClickEvent()的JavaScript回调。

So I setted this attribute with an EL expression, so after creating the marker, this expression would evaluate to null , component p:gmap updates in an AJAX call, and draggable events work now ;) 因此,我使用EL表达式设置了此属性,因此在创建标记后,该表达式的计算结果将为null ,组件p:gmap在AJAX调用中更新,并且可拖动事件现在可以正常工作;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM