J'essaie d'utiliser la bibliothèque JavaScript OpenLayers pour charger un certain nombre de fichiers KML à une carte. Je peux charger tout le KML sans problème, mais maintenant, en essayant de récupérer les données de l'objet OpenLayers.Layer.Vector en cours de génération, je suis confronté à un problème.Console JavaScript peut voir le contenu de l'objet, mais je ne peux pas y accéder
Si je génère l'objet généré avec console.log, je peux voir l'objet complet avec toutes ses propriétés, mais si j'essaie d'accéder à la plupart des propriétés par programme, j'obtiens une erreur indéfinie. Voici mon code:
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...
Donc avec juste console.log (couche) je suis capable de tout voir. Avec la ligne suivante, cependant, bien que l'information existe clairement, j'obtiens l'erreur. De plus, lorsque j'essaie d'accéder directement à la même information via la console, cela fonctionne très bien.
Est-ce que je manque quelque chose d'évident ici?
EDIT:
Voici l'objet racine
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:
Ce ne sera pas en mesure de stringify facilement alors voici quelques informations pertinentes:
intérieur " caractéristiques ":
0: Object
length: 1
__proto__: Array[0]
id: "OpenLayers.Layer.Vector_39"
intérieur "0":
attributes: Object
data: Object
geometry: Object
id: "OpenLayers.Feature.Vector_3508"
layer: Object
lonlat: null
renderIntent: "default"
state: null
style: null
inRange: true
intérieur "attributs":
name: <string, which I can assure you exists>
Pour clarifier les "layer.features [0] .attributes.name" que je tente d'utiliser dans mon code fonctionne parfaitement bien quand je le tape dans la console.
EDIT 3!
de sortie de tiers un accès direct via la console:
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
Sortie d'un script hardcoded:
1) layer -> Object
2) layer.features -> []
3) layer.features[0] -> undefined
etc...
** Que ** obtenez-vous lorsque vous affichez 'console.log (couche) '? La réponse à cette question dépend clairement de la structure de l'objet 'layer'. Par exemple, vous supposez que l'objet 'layer' résultant a une propriété appelée' features', mais il n'y en a pas ici: http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers /Layer-js.html –
Pouvez-vous poster console.log()? Peut-être JSON stringifié si votre navigateur ne le sort pas déjà comme ça. –
Nous avons également besoin de voir la structure de layer.features. – Stephen