假设您有一个使用第 3 方 JS API(使用 dojo)的用户控件。您有一个 JS 函数loadMap
,它为您的控件初始化一些全局变量并将一些事件(来自 3rd 方 API)连接到您的 JS 事件处理程序。在您的事件处理程序中,您需要使用您在loadMap
.
问题: 如果我在同一页面中有多个此控件的实例,则全局变量将相互覆盖并且不起作用。
问题:如果有意义的话,
我如何编写 JS 以在控件实例的范围内拥有全局变量?或任何可以解决我的问题的建议。
这是我的控制 JS 代码(我将其最小化以显示问题),我的全局变量在前 3 行中定义
//create the global variables
var mapVar;
var geocoderVar;
var toolbarVar;
function loadMap(divMap, divSearch) {
...
// create the map
mapVar = new esri.Map(divMap, {
zoom: 0,
minZoom: 0,
maxZoom: 10,
lods: lods
});
// create the geocoder
if (geocoderVar === null) {
geocoderVar = new esri.dijit.Geocoder({
map: mapVar
}, divSearch);
geocoderVar.startup();
}
//Hook up event handlers
dojo.connect(mapVar, "onExtentChange", checkScale);
dojo.connect(mapVar, "onLoad", createToolbar);
}
function createToolbar(themap) {
dojo.connect(mapVar, "onClick", function (evt) {
if (canDrop === true) {
point = evt.mapPoint;
mapVar.graphics.clear();
...
}
...
});
//create the toolbar variable
toolbarVar = new esri.toolbars.Draw(mapVar);
...
dojo.connect(toolbarVar, "onDrawEnd", addToMap);
}
function checkScale(extent, delta, outLevelChange, outLod) {
if (outLod.level == 10) {
canDrop = true;
window[controlName + '_toolbarVar'].activate(esri.toolbars.Draw.POINT, { showTooltips: false });
}
else {
window[controlName + '_toolbarVar'].deactivate();
canDrop = false;
}
}
...