Я пытаюсь использовать библиотеку JavaScript OpenLayers для загрузки нескольких файлов KML на карту. Я могу загрузить весь KML без проблем, но теперь, пытаясь извлечь данные из созданного объекта OpenLayers.Layer.Vector, я столкнулся с проблемой.Консоль JavaScript может видеть содержимое объекта, но я не могу получить к нему доступ
Если я выдаю сгенерированный объект с помощью console.log, я могу увидеть полный объект со всеми его свойствами, но если я попытаюсь получить доступ к большинству свойств программно, я получаю неопределенную ошибку. Вот мой код:
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
var vectors = new Array();
for(i = 1; i <= 14; i++) {
var layer = new OpenLayers.Layer.Vector("KML", {
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "kml/" + i + ".kml",
format: new OpenLayers.Format.KML
})
});
console.log(layer);
console.log(layer.features[0].attributes.name);
vectors.push(layer);
}
//etc...
Так что с помощью console.log (layer) я могу видеть все. Однако со следующей строкой, хотя информация явно существует, я получаю сообщение об ошибке. Кроме того, когда я пытаюсь получить доступ к одной и той же информации непосредственно через консоль, она работает нормально.
Я пропустил что-то очевидное здесь?
EDIT:
Вот корневой объект
Object:
EVENT_TYPES: Array[25]
alwaysInRange: true
div: HTMLDivElement
drawn: true
events: Object
features: Array[1]
id: "OpenLayers.Layer.Vector_39"
inRange: true
map: Object
maxExtent: Object
maxResolution: 1.40625
maxScale: 13517.573318481445
minExtent: null
minResolution: 0.00004291534423828125
minScale: 442943842.5
name: "KML"
numZoomLevels: 16
options: Object
projection: Object
protocol: Object
renderer: Object
resolutions: Array[16]
scales: Array[16]
selectedFeatures: Array[0]
strategies: Array[1]
styleMap: Object
tileSize: Object
units: "degrees"
unrenderedFeatures: Object
__proto__: Object
EDIT 2:
не будет иметь возможность легко Stringify так вот некоторая соответствующая информация:
внутри " функции ":
0: Object
length: 1
__proto__: Array[0]
id: "OpenLayers.Layer.Vector_39"
внутри "0":
attributes: Object
data: Object
geometry: Object
id: "OpenLayers.Feature.Vector_3508"
layer: Object
lonlat: null
renderIntent: "default"
state: null
style: null
inRange: true
внутри "атрибуты":
name: <string, which I can assure you exists>
Для пояснения в "layer.features [0] .attributes.name", что я пытаюсь использовать в своем коде отлично работает, когда я ввожу его в консоль.
EDIT 3!
ярусах выхода из прямого доступа через консоль:
1) layer -> Object
2) layer.features -> Object
3) layer.features[0] -> Object
4) layer.features[0].attributes -> Object
5) layer.features[0].attributes.name -> <the string I'm looking for>
OR
6) layer.features[0].attributes['name'] works the same as above
Выход из закодированного сценария:
1) layer -> Object
2) layer.features -> []
3) layer.features[0] -> undefined
etc...
** Что вы получаете, когда вы показываете 'console.log (layer) '? Ответ на этот вопрос явно зависит от структуры объекта 'layer'. Например, вы предполагаете, что результирующий объект 'layer' имеет свойство, называемое' features', но нет ни одного перечисленного здесь: http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers /Layer-js.html –
Можете ли вы разместить console.log()? Возможно, JSON сжал, если ваш браузер не выводит его так уже. – 2010-11-01 19:13:33
Нам также необходимо увидеть структуру layer.features. – Stephen