Hier ist zunächst ein vereinfachtes JavaScript-API-Beispiel, um das Konzept der Verwendung von DeferredList zur Verarbeitung mehrerer Identifizierungsaufgaben zu veranschaulichen:
//Assume that map is your map object
var idTask1, idTask2, idParams = new esri.tasks.IdentifyParameters();
var url1 = "<server1 url>", var url2 = "<server2 url>";
dojo.connect(map, "onLoad", initIdentifies);
function initIdentifies(map) { //map.onLoad passes in the map object
idTask1 = new esri.tasks.IdentifyTask(url1);
idTask2 = new esri.tasks.IdentifyTask(url2);
//A few sample constant parameters. Set more or less as you need
idParams.tolerance = 12;
idParams.returnGeometry = true;
idParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;
dojo.connect(map, "onClick", runIdentifies);
}
function runIdentifies(evt) {
var defTask1 = new dojo.Deferred(), defTask2 = new dojo.Deferred;
var dlTasks = new dojo.DeferredList([defTask1, defTask2]);
dlTasks.then(showResults); //defTasks will fire after defTask1 and defTask2 have completed
//These parameters change with each request
idParams.width = map.width;
idParams.height = map.height;
idParams.geometry = evt.mapPoint;
idParams.mapExtent = map.extent;
try {
idTask1.execute(idParams, defTask1.callback, defTask1.errback); //Pass the response into the callback on defTask1
} catch (e) {
console.log("Error caught");
console.log(e);
defTask1.errback(e); //If you get an error, execute the errback
}
try {
idTask2.execute(idParams, defTask2.callback, defTask2.errback); //Pass the response into the callback on defTask2
} catch (e) {
console.log("Error caught");
console.log(e);
defTask2.errback(e); //If you get an error, execute the errback
}
}
function showResults(r) {
//The format of 'r' is [[Boolean task 1 success, [task 1 results]],[Boolean task 2 success, [task 2 results]]]
//using the array 'r', build and show your infoWindow as normal
}
Dann ist hier ein Beispiel in jsFiddle, von dem ich denke, dass es das tut, was Sie wollen, und das unter Verwendung aller sichtbaren Ebenen in allen sichtbaren dynamischen Kartenebenen in der Karte ausgeführt wird.
http://jsfiddle.net/blordcastillo/mULcz/
Alle Tippfehler sind jetzt behoben :)
Die Grundidee ist, dass jedes Mal, wenn auf die Karte geklickt oder die Sichtbarkeit umgeschaltet wird, die Identifizierung erneut ausgeführt wird. Wenn die Identifizierung ausgeführt wird, hängt die Anzahl der ausgelösten Identitätsaufgaben von der Anzahl der sichtbaren Ebenen ab und es wird gewartet, bis alle Ebenen zurückkehren, um die Ergebnisse anzuzeigen.