我试图通过迭代列表和检索一些信息来添加标记到谷歌地图。我正在使用原型库。代码如下:
var point = new Array();
var myMarkerOptions = new Array();
var marker = new Array();
recommendedList.each(function(item){
point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
myMarkerOptions[item.location.ID] = {
position: point[item.location.ID],
map: map
};
marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);
});
,其中推荐人列表是JSON响应的形式:
[
{"artist":"artist1","location":{"lat":"50.952226","lng":"5.34832","ID":28}},
{"artist":"artist2","location":{"lat":"52.362287","lng":"4.883965","ID":32}},
...
]
然而,这不起作用。我知道问题不是关于JSON或谷歌地图,因为我尝试了一个更简单的版本与以下代码,它工作:
var myLatlng = new google.maps.LatLng(recommendedList[0].location.lat,recommendedList[0].location.lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
所以问题一定出在迭代和哈希映射上。有人看到问题了吗?谢谢!
很简单,不需要。each
for (var i=0, item; item = recommendedList[i]; i++) {
point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
myMarkerOptions[item.location.ID] = {
position: point[item.location.ID],
map: map
};
marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);
}
你也可以大大简化它,除非你"需要"那些其他数组:
for (var i=0, item; item = recommendedList[i]; i++) {
marker[item.location.ID] = new google.maps.Marker({
new google.maps.LatLng(item.location.lat, item.location.lng),
map
});
}
我认为它可能是你正在使用的数组访问器。在处理完point
, myMarkerOptions
和marker
数组之后你会怎么做呢?
你可以试着将它们声明为
吗?var point = {};
var myMarkerOptions = {};
var marker = {};
这将允许您将它们称为point[item.location.ID]
(等)。我认为item.ID
属性是一个数字,JS试图设置数组的数字索引,而不是在你的哈希中创建一个新的属性。
Prototype each迭代器不支持JSON或对象数据类型