Suite

Dojo Promise/All Array ne remplissant pas InfoTemplate dans ArcGIS Javascript


En utilisant dojo/promise/all, j'essaie de remplir un infoTemplate avec les résultats d'une queryTask qui s'exécute plus tard dans le script.

Notre application renvoie une valeur XY à partir d'une recherche d'adresse géocodée et interroge cette valeur pour voir si elle fait partie d'une série d'entités polygonales. Si c'est le cas, il doit transmettre une chaîne pour chacune des trois requêtes.

La requête s'exécute et la console n'enregistre pas d'erreur. Cependant, l'infoTemplate est vide
:

J'ai essayé de parcourir les résultats du tableau avant d'instancier l'infoTemplate mais je ne sais pas si cela est nécessaire. De plus, j'ai constaté que je ne parviens pas à définir manuellement le titre de l'InfoTemplate à l'aide d'une chaîne.

Code pour ajouter un tableau graphique/appelant :

function addPlaceGraphic(item, symbol) { map.graphics.clear(); var lieu = {}; attributs var, infoTemplate, pt, graphique ; pt = item.feature.geometry; place.address = item.name; place.score = item.feature.attributes.score; var trashQuery = runPWQuery(pt, trashLayer, "corbeille"); var yardQuery = runPWQuery(pt, yardWasteLayer, "yardwaste"); var recycleQuery = runPWQuery(pt, recyclageLayer, "recyclage"); all([trashQuery, yardQuery, recycleQuery]).then(function (results) { //recevoir les réponses aux requêtes, mettre à jour les attributs et ajouter des attributs graphiques = { trashQuery : pt.trashLayer, recycleQuery : pt.recyclingLayer, yardQuery : pt.yardWasteLayer } ; infoTemplate = new InfoTemplate(); infoTemplate.setTitle("Informations de planification"); infoTemplate.setContent("Corbeille : ${trashQuery}
Recyclage : ${recycleQuery}
Vrac mixte : ${yardQuery}" ); graphic = new Graphic(pt, symbol, attributes, infoTemplate); //ajouter à la carte map.graphics.add(graphic); map.centerAt(pt); }); }

Code plus tard dans le script pour queryTask/promesse de retour :

function runPWQuery(in_geometry , in_fl , in_container_id) { var query = new esri.tasks.Query(); query.returnGeometry = true; query.outFields = ["*"]; query.geometry = in_geometry; var promise = in_fl.queryFeatures(query, function(myresponse, io) { var temp_val; var values ​​= []; var tstr; for (var il = 0; il < myresponse.features.length; il++) { if (myresponse. features[il].attributes["MONDAY"] == "Oui") { temp_val = "Lundi"; } else if (myresponse.features[il].attributes["MARDI"] == "Oui") { temp_val = "Mardi" ; } else if (myresponse.features[il].attributes["MERCREDI"] == "Oui") { temp_val = "Mercredi"; } else if (myresponse.features[il].attributes["JEUDI" ] == "Oui") { temp_val = "Jeudi"; } else if (myresponse.features[il].attributes["VENDREDI"] == "Oui") { temp_val = "Vendredi"; } else { //temp_val = "Autre"; temp_val = myresponse.features[il].attributes["DESCRIPT"]; } } var statCount = myresponse.features.length; if (statCount >= 1) { $("#" + in_container_id).html (temp_val); } else { $("#" + in_container_id).html(""); } return temp_val; }, function (error) { console.log(dojo.toJson(error, true)); }); //promesse de retour promesse de retour; } fonction renderPWQuery() { }

Il y a plus d'une façon de le faire, mais je m'attendrais à ce que quelque chose comme celui-ci analyse les résultats renvoyés :

all([trashQuery, yardQuery, recycleQuery]).then(function (results) { //recevoir les réponses aux requêtes, mettre à jour les attributs et ajouter des graphiques trashResults = results[0]; yardResults = results[1]; recycleResults = results[2]; attributs = {"trashQuery":trashResults.attributes.WhateverAttribute, "recycleQuery":recycleResults.attributes.WhateverAttribute, "yardQuery":yardResults.attributes.WhateverAttribute} ; infoTemplate = new InfoTemplate("Scheduling Information","Trash : ${trashQuery }
Recyclage : ${recycleQuery}
Vrac mixte : ${yardQuery}" ); graphic = new Graphic(pt, symbol, attributes, infoTemplate);

Vous devrez probablement vérifier si l'un des résultats est vide avant d'affecter toutes les valeurs d'attribut àles attributspour éviter toute erreur.