Ошибка неверного аргумента в IE8 при рисовании точечных объектов с помощью Openlayers в приложении AJAX - PullRequest
1 голос
/ 13 марта 2011

Я бы просил помощи, потому что я боролся с проблемой, возникающей только в IE8 с моим кодом.Вы можете взглянуть на демонстрационную страницу, которая иллюстрирует проблему, по адресу http://www.europeontrack.com/test.html.. Как вы заметите, он отлично работает Firefox, Chrome, Safari, но в IE8 он вызывает ошибку Javascript «Недопустимый аргумент» в openlayers..js строка 684, символ 178.

Эта страница начинается с инициализации объекта карты openlayers и объявления пустого векторного слоя cityLayer, который мы будем использовать позже для рисования точек.Ссылка «Показать список городов» асинхронно вызывает http://www.europeontrack.com/cityList.html и вставляет ее в DOM.cityList.html объявляет массив, в котором хранятся имена, широты и долготы нескольких городов.Затем этот массив передается в качестве аргумента в функцию showCities (), которая объявлена ​​в test.html следующим образом:

function showCities(cities,layer) {
    var pointFeatures = [] ;
    for ( i = 0 ; i < cities.length ; i++) {
        pointFeatures[i] = new OpenLayers.Feature.Vector(
            newOpenLayers.Geometry.Point(cities[i]['long'],
                cities[i]'lat']).transform(
                map.displayProjection,map.baseLayer.projection));
        pointFeatures[i].attributes = { label: cities[i]['label'] };
    }
    cityLayer.addFeatures(pointFeatures);
    return false ;
}

В IE8 отрисовывается только первый город, содержащийся в массиве городов, а затембраузер выдает ошибку «Неверный аргумент».Вы можете взглянуть на мой исходный код.Я думаю, что сократил это до минимума.Я застрял в этой точке, пытаясь устранить эту проблему.Заранее благодарю за помощь.

Lothaire

Ответы [ 2 ]

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

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

Здесь была моя ошибка:

styleMap = new OpenLayers.StyleMap({
    'default':{
        strokeColor: "#FFFFFF",
        strokeOpacity: 1,
        strokeWidth: 2,
        fillColor: "#852C71",
        fillOpacity: 1,
        pointRadius: 4,
        pointerEvents: "visiblePainted",
        label : "${label}",                   
        fontColor: "#000000",
        fontSize: "10px",
        fontFamily: "Verdana",
        fontWeight: "bold",
        labelAlign: **"${align}",**
        labelXOffset: **"${xOffset}",**
        labelYOffset: "-10"
    }
});

Я указал 2 переменные ($ {align}, $ {xOffset}) в styleMap, для которых я не передавал никакого значения при добавлении объектов в векторный слой. Это привело к поломке IE, тогда как другие браузеры игнорировали его. Я заменил эти переменные на фиксированное значение, и это решило проблему IE8. Извиняюсь за эту глупую ошибку с моей стороны. Спасибо за просмотр.

Lothaire

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

Я посмотрел на него и могу воспроизвести ошибку с помощью публичной сборки OL.Но используя мою собственную копию OL 2.9.1, она работает в IE и FF.

Я сделал небольшие изменения в загруженных файлах, но только во всплывающем классе, чтобы это не повлияло на ваш код.Попробуйте скачать OpenLayers 2.9.1 и посмотреть, работает ли ваше приложение с этой версией.Или просто начните с отладочной версии OL (без сжатия) и попробуйте посмотреть, какая строка кода вызывает ошибку.Гораздо проще, если не смотреть на минимизированный код.: -)

...