Проблема с хеш-таблицами в JavaScript - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь добавить маркеры на карты Google, просматривая список и получая некоторую информацию.Я использую библиотеку прототипов.Код выглядит следующим образом:

    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 или карте Google, потому что я попробовал более простую версию со следующим кодом, и она работала:

      var myLatlng = new google.maps.LatLng(recommendedList[0].location.lat,recommendedList[0].location.lng);

      var marker = new google.maps.Marker({
          position: myLatlng, 
          map: map
      }); 

Так что проблема должна быть в итерации и хэш-картах,Кто-нибудь может увидеть проблему?Спасибо!

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Достаточно просто для тестирования без .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
    });
}
0 голосов
/ 18 июля 2011

Прототип каждого итератора не поддерживает JSON или тип данных объекта.

0 голосов
/ 18 июля 2011

Я думаю, что это могут быть методы доступа к массиву, которые вы используете.Что вы делаете с массивами point, myMarkerOptions и marker, когда закончите с ними?

Можете ли вы попытаться объявить их как

var point = {};
var myMarkerOptions = {};
var marker = {};

Это позволитвы называете их point[item.location.ID] (и т. д.).Я думаю, что свойство item.ID является числом, JS пытается установить этот числовой индекс массива, а не создает новое свойство в вашем хэше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...