Đầu tiên, đây là một ví dụ API JavaScript được đơn giản hóa để hiển thị khái niệm sử dụng DeferredList để xử lý nhiều tác vụ xác định:
//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
}
Sau đây là một ví dụ trong jsFiddle mà tôi nghĩ sẽ làm những gì bạn muốn, chạy bằng cách sử dụng tất cả các lớp có thể nhìn thấy trong tất cả các lớp bản đồ động có thể nhìn thấy trong bản đồ.
http://jsfiddle.net/blordcastillo/mULcz/
Tất cả các lỗi chính tả đã được sửa bây giờ :)
Ý tưởng cơ bản là bất cứ khi nào bản đồ được nhấp hoặc hiển thị được bật, nhận dạng sẽ được chạy lại. Khi nhận dạng được chạy, số lượng tác vụ nhận dạng được kích hoạt tùy thuộc vào số lượng lớp hiển thị và nó chờ cho đến khi tất cả các lớp quay lại để hiển thị kết quả của nó.