2011-01-11 75 views
1

我正在嘗試編寫一個Drupal模塊,它會將UTM座標字段添加到位置表單,以便它們可以與GMap地圖以及緯度和經度字段進行正確的交互 - 即單擊地圖時,UTM座標將與Lat/Long一起計算並填充,如果通過輸入字段來更改緯度/經度座標,則UTM座標也會隨地圖一起更改,反之亦然。在Drupal Gmap上添加事件監聽器的麻煩

我有翻譯和其他一切工作,除了點擊地圖。我試圖在地圖上添加一個Listener,這樣當點擊它時,會在lat/long字段觸發一個change事件,這會觸發UTM字段的更新。但是,我似乎無法讓Listener工作。這裏是我到目前爲止(這是我模塊我的js文件的一個片段,location_utm.js):

$(document).ready(function() { 
    var themap = document.getElementById("gmap-auto1map-gmap0"); 

    Drupal.gmap.addHandler('gmap', function (themap) { 
     var obj = this; 

     var clickListener = GEvent.addListener(obj, "click", function() {   

     /* when the map gets clicked, trigger change event on the lat/long 
      fields so that the utm fields get updated too. */ 
     $('#gmap-auto1map-locpick_longitude0').change(); 
     $('#gmap-auto1map-locpick_latitude0').change(); 



     }); 
    }); 
}); 

我已經嘗試了很多這個代碼的不同略有不同,但似乎無法修正它。我很欣賞任何建議。

回答

1

請參閱代碼中的註釋:

if (GBrowserIsCompatible()) 
{ 
    Drupal.gmap.addHandler('gmap', function(elem, context) { 
    var gmap = this; 

    // Note: GMap module does not support solely 
    // "locpickchange_dragend" and "locpickchange_click" events 
    // by default. It combines map clicks, marker drag and 
    // dragend events in an custom event called "locpickchange". 
    // Binding on those said solely triggers relies on a GMap 
    // locpick widget patch which is included. 
    // 
    gmap.bind('locpickchange', function(context) { 

    // Note: The coordinations stored in gmap.vars.latitude and 
    // gmap.vars.longitude are for the previous location of the 
    // locpicker marker, we need to use gmap.locpick_coord which 
    // is pretty live! 
    // 
    if (gmap.locpick_coord) { 

     // TODO: Implement the logic. 
     // Current latitude: gmap.locpick_coord.lat() 
     // Curren longitude: gmap.locpick_coord.lng() 

    } 
    }); 
} 

如果要使用locpickchange_click & locpickchange_dragend,這裏是髒GMAP模塊的補丁:

From 2fb5a1ca71e1470e5413f10fb83ce959cd1d8634 Mon Sep 17 00:00:00 2001 
From: Sepehr Lajevardi <[email protected]> 
Date: Fri, 8 Jul 2011 14:38:27 +0430 
Subject: [PATCH] Extends the locpick widget event system by adding 
lockpickchange_click and locpickchange_dragend custom 
events. 

--- 
js/locpick.js | 18 ++++++++++++++++++ 
1 files changed, 18 insertions(+), 0 deletions(-) 

diff --git a/js/locpick.js b/js/locpick.js 
index d5aae9c..7c207f9 100644 
--- a/js/locpick.js 
+++ b/js/locpick.js 
@@ -16,6 +16,18 @@ Drupal.gmap.addHandler('gmap', function (elem) { 
    } 
    }); 

+ // Bind triggering of a map click on our custom events. 
+ obj.bind("locpickchange_dragend", function() { 
+ if (obj.locpick_coord) { 
+  GEvent.trigger(obj.map, "click", null, obj.locpick_coord); 
+ } 
+ }); 
+ obj.bind("locpickchange_click", function() { 
+ if (obj.locpick_coord) { 
+  GEvent.trigger(obj.map, "click", null, obj.locpick_coord); 
+ } 
+ }); 
+ 
    obj.bind("locpickremove", function() { 
    obj.map.removeOverlay(obj.locpick_point); 
    obj.locpick_coord = null; 
@@ -40,10 +52,16 @@ Drupal.gmap.addHandler('gmap', function (elem) { 
      GEvent.addListener(obj.locpick_point, 'dragend', function() { 
      obj.locpick_coord = obj.locpick_point.getLatLng(); 
      obj.change('locpickchange', binding); 
+   // Also trigger a locpickchange_dragend event 
+   // so we can bind on just marker dragends. 
+   obj.change('locpickchange_dragend', binding); 
      }); 
      obj.locpick_coord = point; 
      obj.map.panTo(point); 
      obj.change('locpickchange', binding); 
+   // Also trigger a locpickchange_click event 
+   // so we can bind on just map clicks. 
+   obj.change('locpickchange_click', binding); 
     } 
     else { 
      // Unsetting the location 
-- 
1.7.6