更新地图属性

时间:2013-04-05 22:19:30

标签: javascript maps yui mapbox

我正试图“缓解”地图集地图。很确定这不是特定于mapbox.js

基本上我通过id获取地图,然后在其上调用属性,但这些不会更新地图。

我可以在taking this example上的DOM控制台中重新创建问题。

a busy cat

在我的应用程序上,我有一个更新地图的功能,我使用相同的逻辑:通过标识符获取地图,然后调用属性来移动它。

我错过了什么?

谢谢!

在我的代码中,我有一个YUI自动填充字段,并且“on”或“after”都没有工作:

function addMeasureInput() {
YUI().use("autocomplete", "autocomplete-filters", "autocomplete-highlighters", function(Y) {
    //skin
    Y.one('body').addClass('yui3-skin-sam');
    //Array source
    var locs = getLocationsList();
    Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
        resultFilters: 'phraseMatch',
        resultHighlighter: 'phraseMatch',
        source: locs,
        on: {
            select: function() {
             console.log("Location Selected!");
                             var map = mapbox.map('map');
             map.ease.location({ lat: 0, lon: 0 }).zoom(5).optimal();
            }
        },
        after: {
            select: function(o) {
                var map = mapbox.map('map');
                map.ease.location({ lat: 0, lon: 0 }).zoom(5).optimal();
                showLoc(o.result.raw);
            }
        }
    });
});

};

1 个答案:

答案 0 :(得分:0)

mapbox.map('map')必须创建地图:http://mapbox.com/mapbox.js/api/v0.6.7/#mapbox.map

Create a map on the current page. 

当我得到地图DOM元素document.getElementById('map')时,我没有找到任何指向mapbox地图实例的链接。所以可能你不能通过DOM获得存在的地图实例。但是,在DOM元素中保存自己的javascript对象是一个坏主意。

最好将地图实例保存为javascript对象。对于您的mapbox,可以在map对象中创建http://mapbox.com/mapbox.js/example/optimal-easing/ window实例。所以你可以写:

map.ease.location({ lat: 38.9, lon: -77 }).zoom(10).optimal();

map.zoomIn();

等等。它会起作用。

<强> UPD: 据我所知,你可以更好地使用延迟初始化:

var map = null;

function ease (lat, lon, zoom) {
    if (!map) {
        map = mapbox.map('map');
    }
    map.ease.location({ lat: lat, lon: lon }).zoom(zoom).optimal();
}

function addMeasureInput() {
    YUI().use("autocomplete", "autocomplete-filters",
              "autocomplete-highlighters", function(Y) {
        //skin
        Y.one('body').addClass('yui3-skin-sam');
        //Array source
        var locs = getLocationsList();
        Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
            resultFilters: 'phraseMatch',
            resultHighlighter: 'phraseMatch',
            source: locs,
            on: {
                select: function() {
                    console.log("Location Selected!");
                    ease(0, 0, 5);
                }
            },
            after: {
                select: function(o) {
                    ease(0, 0, 5);
                    showLoc(o.result.raw);
                }
            }
        }
    });
});

但是地图初始化它是一个非常慢的操作(创建dom,加载tile),所以最好初始化map一次,可能不需要。