Скажите, что у вас есть пользовательский элемент управления, который использует сторонний JS API (использует додзе). У вас есть функция JS loadMap
, которая инициализирует некоторые глобальные переменные для вашего управления и подключает некоторые события (от стороннего API) к вашим обработчикам событий JS. В обработчиках событий вам нужно использовать глобальные переменные, которые вы определили в loadMap
.Глобальные переменные JS в пределах области управления пользователя?
Проблема: Если у меня есть более чем один экземпляр этого элемента управления в одной и той же странице, что Глобалы бы наложиться друг на друга и не работал бы.
Вопрос:
Как я могу написать 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;
}
}
...
Я не уверен, что понимаю проходящую часть? также, если я это сделаю, это не означает, что мне нужно иметь JS в коде управления пользователя (по сравнению с отдельным файлом)? –
Вам нужно только передать, если ваш код тянет внешние переменные, скажем, со страницы, на которой он находится, или из другой библиотеки. Классический пример передается в «JQuery» как «$», так что $ не сталкивается глобально, но может использоваться внутри области функций. Я отредактирую ответ, чтобы показать, как использовать извне. – MaxPRafferty
мне потребовалось пару часов, чтобы все было правильно (спасибо :)), но кажется, что не все события подключены правильно. Будет ли это влиять на поведение скрипта? –