Проблемы с вызовом fitbounds вне jquery.each () - PullRequest
1 голос
/ 09 июля 2010

я работаю над картой Google в javascript (v3). Мне нужно показать некоторые маркеры из XML, для которых я использую Jquery.

вот объект и функция, может сэкономить мне время объяснения:

    var VX = {
    map:null,
    bounds:null
}
VX.placeMarkers = function(filename) {
    $.get(filename, function(xml) {
        $(xml).find("marker").each(function() {
            var lat         = $(this).find('lat').text();
            var lng         = $(this).find('lng').text();
            var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
            VX.bounds.extend(point);                
            VX.map.fitBounds(VX.bounds);    //this works        
            var marker = new google.maps.Marker({
                position: point,
                map: VX.map,
                zoom: 10,
                center: point
                });
            });
        });
        //VX.map.fitBounds(VX.bounds);      //this shows me the ocean east of africa    
}

По сути, моя проблема в том, что я не могу понять, как выполнить подгонку снаружи функции .each, а выполнение внутри функции вызывает ее для каждого маркера, который выглядит плохо.

Я объявляю границы при инициализации карты ... не включил весь код, потому что он похож на 300 строк.

Вы должны использовать значение, которое я передал глобальному объекту?

Редактировать: ах, я вызывал его извне функции get!

1 Ответ

0 голосов
/ 10 июля 2010

Второй вызов не работает, потому что он срабатывает до того, как возвращается ajax get().

Поместите fitBounds внутри обработчика get(), но вне функции each().Вот так:

var VX = {
    map:null,
    bounds:null
}
VX.placeMarkers = function(filename) 
{
    $.get
    (
        filename, 
        function(xml) 
        {
            $(xml).find("marker").each
            (
                function() 
                {
                    var lat         = $(this).find('lat').text();
                    var lng         = $(this).find('lng').text();
                    var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));

                    VX.bounds.extend(point);                
                    //VX.map.fitBounds(VX.bounds);    //this works        

                    var marker = new google.maps.Marker
                    ({
                        position: point,
                        map: VX.map,
                        zoom: 10,
                        center: point
                    });
                }
            );
            VX.map.fitBounds(VX.bounds);    //-- This should work.
        }
    );  
    //VX.map.fitBounds(VX.bounds);      //this shows me the ocean east of africa    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...