Ссылка на массив маркеров Google Map - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь сослаться на массив маркеров, который я создал, но когда я пытаюсь сослаться на элемент массива, элемент получает сообщение, что GLOBAL_MARK.0 является нулем или не объектом. Я думаю, что это может быть проблемой, но я не знаю, как с этим справиться. Вот код.

var GLOBAL_MARK = "[]"
var vcount = 0;

 function load() {

   if (GBrowserIsCompatible()) {       
   var map = new GMap2(document.getElementById("map"));         
   map.addControl(new GSmallMapControl());         
   map.addControl(new GMapTypeControl());       
   MyLat = "47.614495"
   MyLng =  "-122.341861"
                                                                            map.setCenter(new GLatLng(MyLat, MyLng), 13); 

    GDownloadUrl("allmarkers.php", function(data) {        
    var xml = GXml.parse(data);          
    var markers = xml.documentElement.getElementsByTagName("marker");          
    for (var i = 0; i < markers.length; i++) {      
        var name = markers[i].getAttribute("name"); 
        var id = markers[i].getAttribute("id");   
        var address = markers[i].getAttribute("address");             
        var type = markers[i].getAttribute("type");            
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers [i].getAttribute("lng")));             

        var marker = createMarker(point, name, address, type, id);    
        MyAddMarker(marker)
        map.addOverlay(marker);          
     }        
});   
OutTest()    
}    
}      

function MyAddMarker(marker) {
    GLOBAL_MARK[vcount] = marker
    vcount = vcount + 1
}

function OutTest() {
    alert(GLOBAL_MARK[0].getLatLng)
}


function createMarker(point, name, address, type, id, date1, date2) {      
var marker = new GMarker(point, customIcons[type]);    
var html = "<b>" + name + "</b> <br/>" + address + "<br><br><input type=\"button\"    value=\"  View Posts  \" onclick=\"view_posts('" + id + "','" + type + "','" + date1 + "','" + date2 + "','no')\">"
 GEvent.addListener(marker, 'click', function() {         
 marker.openInfoWindowHtml(html);
  }); 
   return marker;    
    }   

1 Ответ

0 голосов
/ 18 августа 2011

Много ошибок в этом коде. GLOBAL_MARK определенно был объявлен неправильным для использования в качестве объекта, как вы используете его в MyAddMarker(). Я постараюсь исправить столько, сколько я вижу на глаз, фактически не имея возможности запустить код:

GLOBAL_MARK = [];
GDownloadUrl("allmarkers.php", function(data) {        
    var xml = GXml.parse(data);          
    var markers = xml.documentElement.getElementsByTagName("marker");          
    for (var i = 0; i < markers.length; i++) {      
        var name = markers[i].getAttribute("name"); 
        var id = markers[i].getAttribute("id");   
        var address = markers[i].getAttribute("address");             
        var type = markers[i].getAttribute("type");            
        var point = new GLatLng(
            parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))
        );
        var marker = createMarker(point, name, address, type, id);    
        MyAddMarker(marker);
        map.addOverlay(marker);          
     }
// when the code gets here, the data from allmarkers.php is done
});

OutTest();

function MyAddMarker(marker) {
    GLOBAL_MARK[vcount] = marker;
    vcount = vcount + 1;
}

function OutTest() {
    alert(GLOBAL_MARK[0].getLatLng);
}

Кроме того, я нигде не вижу декларации для vcount.

И я подозреваю, что вы вызываете OutTest() до завершения анонимной функции в GDownloadUrl. Это может быть асинхронная функция, которая еще не завершена, когда вы вызываете OutTest().

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