我正试图“缓解”地图集地图。很确定这不是特定于mapbox.js
基本上我通过id获取地图,然后在其上调用属性,但这些不会更新地图。
我可以在taking this example上的DOM控制台中重新创建问题。
在我的应用程序上,我有一个更新地图的功能,我使用相同的逻辑:通过标识符获取地图,然后调用属性来移动它。
我错过了什么?
谢谢!
在我的代码中,我有一个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);
}
}
});
});
};
答案 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一次,可能不需要。