Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Вопрос по Google Maps API


Автор: HongKilDong 21.1.2009, 19:39
Наверняка многие имели дело с Google Maps API, подскажите, как из callback функции EventListener-а получить доступ к глобальной переменной?

Код


var someVar = 'some value';

...

GEvent.addListener(map, "click", function() {

>> Как получить доступ к someVar отсюда? <<

});



Автор: NNaarreekk 21.1.2009, 20:20
А что global someVar; не работает?

Автор: HongKilDong 21.1.2009, 20:42
Этот кусок кода является частью html возвращаемого в качестве AJAX-ответа, а-ля:
Код

<div>
...
</div>
<script>
var someVar = 'some value';
...
GEvent.addListener(map, "click", function() {
...
});
</script>


и так как для организации работы с AJAX я использую Prototype библиотеку, этот скрипт выпарсивается из кода ответа средствами библиотеки и исполняется посредством eval('...содержимое тега <script>...') в scope прототайповских внутренностей... 

вообщем я уже потерялся :[

но с global конечно стоит попробовать...

Автор: Aliance 22.1.2009, 09:52
Цитата(NNaarreekk @  21.1.2009,  21:20 Найти цитируемый пост)
А что global someVar; не работает? 

Такой конструкции в языке нет.

Небольшой лекбез по поводу видимости переменных:
  • Любая объявленная вне функции переменная - глобальная
  • Глобальные переменные видны из любого сценария, доступ к ней можно получить из любого окна
  • Объявленная внутри тела функции переменная считается глобальной только в том случае, если она объявлена без помощи ключ. слова var

Небольшой примерчик:
Код

var test = 'test 1';
test2 = 'test 2';
function myFunc()
{
    var test3 = 'test 3';
    test4 = 'test 4';
    alert( 'Доступ к переменной: ' + typeof test );
    alert( 'Доступ к глобальной переменной: ' + typeof test2 );
}
myFunc();
alert( 'Доступ к локальной переменной: ' + typeof test3 ); // переменная локальная и доступ к ней напрямую не может быть осуществлен.
alert( 'Доступ к глобальной переменной: ' + typeof test4 );


По поводу сабжа. Сам сейчас работаю с гугл-картами. У меня все прекрасно видит, правда у меня код не eval`ится. Возможно проблема в этом.

К глобальной переменной можно обратиться еще так: window[varName] - попробуй так!

P.S.: вот код, который работает у меня:
Код

$( function()
    {
        // ссылка на контейнер с контекстным меню
        menu = $( '#menu' );
            GEvent.addListener( gmaps.markers[0], 'click', function( evt )
                {
                    // ...
                    // тут идет доступ к глобальной переменной
                    menu.fadeOut( 'slow' );
                    // ...
                }
            );
    }
);

Автор: NNaarreekk 22.1.2009, 10:38
Aliance, + вместо HongKilDong, а то он не может пока! smile 

Автор: ksnk 22.1.2009, 10:40
Если ничего не помогает - попробуй так:
Код

window.someVar = 'some value';
...
GEvent.addListener(map, "click", function() {
>> Как получить доступ к someVar отсюда? <<
alert(someVar);
});

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)