2011-01-11 13 views
1

Drupalモジュールを作成しようとしていますが、GMapマップとLatitudeフィールドおよびLongitudeフィールドと適切に相互作用するように、UTM座標フィールドを位置フォームに追加します - つまり、地図がクリックされると、UTM座標が計算されて緯度/経度と共に計算され、緯度/経度座標がフィールドに入力されることによって変更されると、UTM座標も変更され、およびその逆。Drupal Gmapのイベントリスナーを追加するのに問題があります

マップをクリックする以外は、翻訳とその他の作業はすべて行っています。私はマップにリスナーを追加しようとしています。クリックすると、変更イベントが緯度/経度フィールドでトリガーされ、UTMフィールドの更新がトリガーされます。しかし、リスナーを働かせるようには思えません。ここで(これは、location_utm.js私のモジュールのための私の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

コードのコメントを参照してください:あなたはlocpickchange_click & locpickchange_dragendを使用したい場合には

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() 

    } 
    }); 
} 

、ここで汚れた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 
関連する問題