2015-08-14 3 views
3

Я нашел другие проблемы с переполнением стека, предлагая, что использование события «idle» - это способ вызвать обратный вызов, когда карта google полностью загружена. Но в моем случае я хочу запустить некоторый код, чтобы вставить некоторый текст в элемент в пользовательском интерфейсе карты, но я нахожу, что «незанятые» огни до создания этих элементов.Обратный вызов при загрузке элементов элементов управления Google Maps

Чтобы быть явным, я придаю функцию инициализации для метода загрузки окна:

google.maps.event.addDomListener(window, 'load', initialize); 

Внутри инициализации, я создаю некоторые элементы пользовательского интерфейса и прикрепить их к карте:

function initialize() { 
    map = new google.maps.Map(document.getElementById("map-div"), mapOptions); 
    ... 
    // set up the controls div 
    var controlsDiv = document.createElement('div'); 
    controlsDiv.id="cd"; 
    controlSetup(controlsDiv); 
    map.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlsDiv); 
} 

Хорошо, но тогда то, что я хочу сделать, это запустить функцию, как только все будет готово. В моем случае я собираюсь вставить дополнительный текст в div-элементы управления, поэтому мне нужно, чтобы они были там.

Я попытался это в последней строке метода инициализации:

google.maps.events.addListenerOnce(map,'idle',emitText); 

Однако emitText имеет линию, которая пытается getElementById («CD») (далее controlsDiv на карте), но я получите, что он равен нулю, потому что emitText уволил, прежде чем элементы управленияDiv действительно завершили загрузку.

Вопрос в том, как определить полную загрузку карты, включая любые разделители пользовательского интерфейса. Мое тестирование показывает, что событие «бездействия» запускается до того, как элементы пользовательского интерфейса загружаются и доступны в DOM. Заранее спасибо!

+0

Моим временным решением было просто поставить метод, который опросит существование, прежде чем идти вперед. Итак, теперь, в последней строке инициализации, я вызываю initialEmitText вместо emitText. InitialEmitText проверяет значение null на элементе соответствия и устанавливает тайм-аут, чтобы продолжать проверять, являются ли они пустыми, если они не являются, вызывает emitText. Я не думаю, что это супер-элегантный, но он работает. Я оставлю вопрос открытым, если кто-то знает лучшее решение. – JawguyChooser

+0

Вы нашли решение? –

+0

Вау, это было 3 года назад! Я уверен, что в итоге я просто придерживался опроса, который я описал в комментарии выше. – JawguyChooser

ответ

1

просто введите controlsDiv вместо getElementById("cd"), не имеет значения, добавлен ли div в документ.

+0

Итак, это должно работать, если controlDiv является глобальной переменной. Это не так, мне нужно каким-то образом получить доступ к этому объекту из совершенно другого метода. Я закончил делать что-то вроде обходного пути: я просто делаю 200-миллисекундный возврат и цикл до тех пор, пока getElementById не вернет null, затем я продолжу и отформатирую текст внутри него. – JawguyChooser

Смежные вопросы