2008-12-13 96 views
0

我有这个代码生成市场我想点击弹出信息窗口。谷歌地图API - 无法获取信息窗口数据加载正确

for (i = 0; i < marker_array.length; i++) { 
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]); 
    var marker = new GMarker(point, markerOptions); 

    GEvent.addListener(marker, "click", function() { 
     marker.openInfoWindowHtml(html_data); 
     }); 
    map.addOverlay(marker); 
    } 

问题是只有一个市场结束了可点击。无论点击哪一个,包含一个可点击标记数据的信息窗口都会弹出一个可点击标记。所有标记都会加载并位于正确的位置,所以问题只在于为每个标记显示弹出窗口数据。

我已经签出了关于“展开”标记功能here的部分,看起来这可能是我要出错的地方,但我无法通过测试他们所建议的更改来获得此功能。

+0

`html_data`的来源是什么?你是否打算为每个标记都一样?因为这就是你的样本工作。 – lincolnk 2010-10-27 16:44:45

回答

0

我不太确定如果我关注,但你是否说所有弹出窗口中都有相同的数据?

我认为这是问题,这是因为事件侦听器的工作方式。当发生点击功能时,它会评估侦听器事件。所以你显示的HTML总是一样的,因为变量总是被重写。

+0

弹出窗口仅在其中一个标记上生成。换句话说:当我点击m1时,m2数据出现在m2以上,当我点击m2时,m2数据出现在m2以上。 – Evan 2008-12-13 03:32:29

0

我用的是符合我的标记数据对我的HTML数组,它工作得很好:

function createMarker(posn, title, icon, i) { 
    var marker = new GMarker(posn, {title: title, icon: icon, draggable:false}); 
    GEvent.addListener(marker, 'mouseover', function() { 
     map.closeInfoWindow() 
     marker.openInfoWindowHtml(infoText[i]) 

    }); 
    return marker; 
} 
1

我相信你的问题是,可变html_data是这个循环的所有迭代相同。您应该更新每个循环中变量的值,以使值不同。

0

我发现了相同的情况,我有解决这个问题的办法。我建议你创建一个扩展标记类的自定义类。在这个自定义类中,您应该为您的数据创建一个具有参数的构造函数,并且此类还应该有自己的信息窗口变量,该变量将从您的主应用程序调用。例如:

自定义类:

public class StoreSpot extends Marker 
{ 
    public var infoWindow:InfoWindowOptions; 
    public var store_id:String; 
    public var address:String; 
    public var name:String; 
    ... 
} 

主要应用:

tempMarker = new StoreSpot(
    tempLatlng, 
    new MarkerOptions({ 
     icon:new spotStore(), 
     iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER, 
     iconOffset:new Point(0,-50) 
    }), 
    temp.store_id, 
    temp.name, 
    temp.address, 
    temp.detail 
); 

这样你可以将不同的信息窗口不同的标记。希望这对你有用。在此处输入代码。