在jquery.each()之外调用fitbounds的问题

时间:2010-07-09 19:12:48

标签: javascript jquery google-maps-api-3

我在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函数外部进行fitbounds,并且在函数内部执行它会为每个看起来很糟糕的标记调用它。

我在初始化地图时声明边界...还没有包含整个代码,因为它像300行。

我能够使用传递给全局对象的值吗?

编辑:啊,我是从get函数外面调用它的!

1 个答案:

答案 0 :(得分:0)

第二个调用不起作用,因为它在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    
}