Мне нужна помощь в понимании области видимости в Javascript.Я опубликовал аналогичный вопрос ранее и преждевременно пометил его как принятый.(В моем случае решение не сработало).
У меня есть javascript (a) и jQuery script (b).Мне нужно получить доступ к некоторым значениям из (a) в (b).
В (a) у меня есть:
function map_maker_js( args ) {
var map = new google.maps.Map(document.getElementById( args['id'] ), myOptions);
//rest of the code for building the map goes here
google.maps.event.addListener(map, 'tilesloaded', viewport_bounds);
function viewport_bounds() {
var bounds = map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var maxLat = ne.lat();
var maxLong = ne.lng();
var minLat = sw.lat();
var minLong = sw.lng();
var the_maps_bounds = [maxLat, maxLong, minLat, minLong];
//return(the_maps_bounds);
}
}
В скрипте jQuery (b) мне нужны the_maps_bounds,который рассчитывается с помощью viewport_bounds ().Я не могу просто переместить google.maps.event.addListener(map, 'tilesloaded', viewport_bounds);
в (b), потому что «карта» выходит за рамки.Это не будет работать в (b):
google.maps.event.addListener(map, 'tilesloaded', function() {
// This code will only execute after event `tilesloaded` happens
var the_maps_bounds = viewport_bounds()
// now do something with the bounds
// ...
});
Если я переместу функцию viewport_bounds () за пределы map_maker_js, то мне придется добавить карту в качестве аргумента, который не будет работать в (б) либо.
Код, над которым я работаю, находится в плагине WordPress.Я не думаю, что это повлияет на ответ.
Я учусь, все еще изучаю JavaScript.Какой лучший способ решить эту проблему?
Спасибо
Обновление:
Спасибо Робу У за ваше предложение.Вот что я получил сейчас:
var the_maps_bounds;
function map_maker_js( args ) {
var map = new google.maps.Map(document.getElementById( args['id'] ), myOptions);
//rest of the code for building the map goes here
google.maps.event.addListener(map, 'tilesloaded', viewport_bounds);
function viewport_bounds() {
var bounds = map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var maxLat = ne.lat();
var maxLong = ne.lng();
var minLat = sw.lat();
var minLong = sw.lng();
the_maps_bounds = [maxLat, maxLong, minLat, minLong];
alert(the_maps_bounds); //is the the_map_bounds working
return(the_maps_bounds);
}
}
В скрипте (b) я получил:
jQuery.noConflict();
jQuery(document).ready(function($) { //how jQuery scripts are written in WordPress
alert(window.the_maps_bounds);
//rest of my functions
});
Когда я просматриваю страницу, я получаю "undefined" вокно оповещения, а затем окно оповещения с лат-лонгами.Я также попробовал предупреждение без «окна».А на событии ready:
$('#map').ready(function() {
alert(the_maps_bounds);
});
Я предполагаю, что the_maps_bounds в скрипте (b) не имеет значения по причине соема.Оповещение срабатывает до того, как его значение установлено в сценарии (а)?Что-то еще происходит?Есть идеи?Спасибо.