случайное получение OpenLayers.Layer.OSM.Mapnik не является конструктором - PullRequest
0 голосов
/ 21 марта 2011

У меня есть небольшое всплывающее окно, которое я загружаю по клику пользователя по ссылке на странице.Но примерно в половине случаев я получаю сообщение «OpenLayers.Layer.OSM.Mapnik не является конструктором» в файле console.log firebug.Если я закрою всплывающее окно (которое является диалоговым окном jqueryui) и затем снова нажму на ссылку, скорее всего, это не приведет к ошибке.Но если я закрою его и открою снова, я снова получу ошибку.Это очень странно.

Если я полностью обновляю страницу, я получаю сообщение об ошибке при первом щелчке, но закрываюсь, а затем получаю карту.

Есть ли секрет загрузки карты вменьшее окно, которое мне не хватает?Я не получаю сообщение об ошибке в полноэкранной версии карты на другой странице ...

Вот код, который загружает карту:

var map = undefined,
popup = undefined;

function initialize (){
    var center_lat = "39.828175";
    var center_long = "-98.579500";
        OpenLayers.ImgPath = "/images/openlayers/";
    map = new OpenLayers.Map ("map", {
        controls:[
            new OpenLayers.Control.Navigation(),
            new OpenLayers.Control.PanZoomBar()],
        });
    var scalebar = new OpenLayers.Control.ScaleBar({displaySystem: "english",align: "right"});// this is an external library that is loaded as a js file and works great on the full screen map too....
    map.addControl(scalebar);

    layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Open Street Maps");
    map.addLayer(layerMapnik);
    lonLat = OLL(center_long, center_lat);
    map.setCenter (lonLat, 13);
}

1 Ответ

0 голосов
/ 22 марта 2011

Возможно, вы выполняете свой код до полной загрузки файла js с конструктором OSM.Это часто случается, если вы не ждете события document.onReady перед выполнением вашего кода.При первой загрузке страницы файл js запрашивается с сервера, загрузка занимает несколько десятых секунды, что делает его слишком поздно для использования в коде страницы.Во второй раз код js кэшируется, делая его доступным для кода страницы.

Когда вы вызываете функцию initialize ()?

...