2011-01-11 77 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