2010-06-15 121 views
0

我正在使用Google Map的ActionScript API在Flash Builder 4中工作。我创建了一个地图,加载了一些自定义标记并为每个标记添加了一些MouseEvent侦听器。动态Google Maps API InfoWindow HTML内容

加载InfoWindow面板时出现问题。我想根据存储在数据库中的信息动态设置htmlContent。麻烦的是,这些信息可以每隔几秒钟更改一次,每个标记都有一个唯一的数据集,因此我无法在实际创建标记时对其进行静态设置。我有一种方法可以每分钟或将数据库中的所有记录加载到Object变量中。我需要在htmlContent中显示的所有内容都包含在此对象的唯一标识符下。

问题的基本症结在于,我无法唯一地识别信息窗口,因此我无法确定要将哪些信息拉入面板。

marker.addEventListener(MapMouseEvent.ROLL_OVER, function(e:MapMouseEvent):void { showInfoWindow(e.latLng) }, false, 0, false); 

这是我的鼠标事件监听器。我所说的功能,“showInfowindow”看起来是这样的:

private function showInfoWindow(latlng:LatLng):void 
{ 
    var options:InfoWindowOptions = new InfoWindowOptions({title: appData[*I NEED A UNIQUE ID HERE!!!*].type + " Summary", contentHTML: appData[*I NEED A UNIQUE ID HERE!!!*].info}); 
    this.map.openInfoWindow(latlng, options); 
} 

我以为我到的东西通过能够传递一个变量在我的事件监听器的声明,但它只是讨厌已经通过,它通过一个动态变量只返回最后一个值的使用。

实施例:

marker.addEventListener(MapMouseEvent.ROLL_OVER, function(e:MapMouseEvent):void { showInfoWindow(e.latLng, record.unit_id) }, false, 0, false); 

即溶液是痛苦接近工作。当我尝试上述解决方案并滚动一个标记时,我会遍历一个循环来创建我的标记,但是每个标记的信息都反映了创建的最后一个标记的任何信息。

我为长时间的解释道歉,但我只是想让我的问题尽可能清楚。有没有人有任何关于如何修补我在底部发布的解决方案或从底层解决方案中获得的解决方案?

由于提前,

彼得Hanneman的

+1

我没有使用ActionScript的经验,但这看起来像一个封闭的问题。你可能想看看这篇文章:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Closures#Creating_closures_in_loops.3a_A_common_mistake(关于JavaScript,但我想这同样适用于Action Script) – 2010-07-01 15:30:54

回答

0

我创建了一个非常难看的解决方法暂时..

由于每个标记的经度&纬度是唯一我加了一些代码,其中标记会添加到地图中,从而创建一个全局可见的关联数组,该数组使用Google Map的API位置对象的散列作为关键字,并使用我的唯一标识符作为值。然后,当我的事件侦听器解雇时,我可以从返回的事件中抽取位置对象,对其进行散列,在我的数组中执行查找,并将唯一ID拉出以将标记特定信息拖入InfoWindow。

它的功能非常好,但它让我感觉很脏。请告诉我有人有更好的解决方案?

+0

我认为这很漂亮很多正确的解决方案。即使Google Maps API网站上的示例使用全局标记数组将InfoWindow从一个切换到另一个... – Alexandra 2013-02-06 21:37:49

相关问题