2014-07-22 37 views
1

我有一個p:gmap組件。它從一個bean zoom屬性,並增加了pointSelectPrimefaces GMap,如何在pointSelect事件後更新縮放事件

標記通常的用戶交互是這樣的:

  1. 用戶放大,以找出他所期望的位置
  2. 用戶點擊地圖
  3. 地圖重新加載與她點擊點標記權

我唯一的問題是,地圖刷新後,地圖被縮小,因爲縮放屬性不會得到更新

號碼:GMAP代碼看起來像這樣

<p:gmap 
    binding="#{mapBean.gmap}" 
    zoom="#{mapBean.zoom}" 
    model="#{mapBean.poiMapModel}" 
    widgetVar="poiMap" 
    id="poiMapComponent"   
    > 
    <p:ajax event="pointSelect" 
     listener="#{mapBean.onPointSelect}" 
     update=":#{p:component('poiMapComponent')}" 
    /> 
</p:gmap> 

MapBean的相關代碼:

public void onPointSelect(PointSelectEvent event) { 

     LatLng latlng = event.getLatLng(); 


     int _zoom = this.getGmap().getZoom(); //This never gets changed 
     System.out.println("NEW ZOOM = " + _zoom); 

     //Creating a new Marker in the clicked area 
     selectedMarker = new Marker(latlng, ""); 
     poiMapModel.addOverlay(selectedMarker); 
    } 


    public org.primefaces.component.gmap.GMap getGmap() { 
     return gmap; 
    } 
    public void setGmap(org.primefaces.component.gmap.GMap gmap) { 
     this.gmap = gmap; 
    } 

經過一些測試後,我確定MapBean.setZoom()永遠不會被調用。你可以看到,我甚至試着將組件綁定回bean,所以我可以得到p:gmap的當前縮放值。但似乎PointSelect事件總是重置zoom值。我找不到處理變焦變焦的方法。

好像還有的beanp:gmap部件之間的單向通信

我的問題是:有沒有辦法檢測縮放變化並獲取更新值?有p:gmap更新bean的屬性zoom

回答

3

的號碼:GMAP事件API有四個事件(用戶指南4.0 ed.2.2第214頁):

  1. markerDrag:獲取拖累標記例如
  2. overlaySelect:獲得所選的覆蓋情況下
  3. 指向 - 選擇:選擇獲取點的座標
  4. stateChange:獲取地圖的地圖/縮放級別的界限

所以,你可以得到

<p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/> 

public void onStateChange(StateChangeEvent event) { 
    zoom = event.getZoomLevel(); 
} 
+0

縮放級別我知道* stateChange *,但我從來不考慮變焦更新的狀態變化。感謝Thanx指出。絕對比用javascript搞亂更清潔 – yannicuLar

相關問題