我試圖使用OpenLayers JavaScript庫來加載一些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(層)我能夠看到一切。不過,儘管信息明顯存在,但我得到了錯誤。另外,當我嘗試直接通過控制檯訪問相同的信息時,它工作得很好。
我在這裏錯過了一些明顯的東西嗎?
編輯:
這裏是根對象
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
編輯2:
將無法對字符串化容易使這裏是一些相關的信息:
內「特徵「:
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」,我試圖在我的代碼使用當我把它輸入到控制檯時工作得很好。
編輯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'對象有一個叫'features'的屬性,但是這裏沒有列出:http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers /Layer-js.html – 2010-11-01 19:10:20
你可以發佈console.log()嗎?如果你的瀏覽器沒有像這樣輸出它,也許JSON字符串化。 – 2010-11-01 19:13:33
我們還需要查看layer.features的結構。 – Stephen 2010-11-01 19:15:03