Самый простой способ - поместить ваше "что-то" в обратные вызовы gridComplete
, но с помощью двух обратных вызовов проверить, что другой завершен.Что-то вроде этого:
function do_something_wonderful() {
// This is the awesome stuff that you want to
// execute when both lists have loaded and finished.
// ...
}
var one_done = false;
function done_checker() {
if(one_done) {
// The other one is done so we can get on with it.
do_something_wonderful();
}
one_done = true;
}
$("#list1").jqGrid({
//blah blah blah
gridComplete: done_checker
});
$("#list2").jqGrid({
//blah blah blah
gridComplete: done_checker
});
Это приятно распространяется на более чем два списка с парой небольших модификаций:
- использовать
var how_many_done = 0;
вместо one_done
. - Сделайте
++how_many_done;
вместо one_done = true;
и переместите его на вершину done_checker
. - Замените
if(one_done)
на if(how_many_done == number_of_tasks)
, где number_of_tasks
- это количество ваших AJAX-задач.
Общая версия выглядела бы примерно так:
var number_of_tasks = 11; // Or how many you really have.
var how_many_done = 0;
function done_checker() {
++how_many_done;
if(how_many_done == number_of_tasks) {
// All the AJAX tasks have finished so we can get on with it.
do_something_wonderful();
}
}
Еще лучшая версия обернула бы состояние в замыкании:
var done_checker = (function(number_of_tasks, run_when_all_done) {
var how_many_done = 0;
return function() {
++how_many_done;
if(how_many_done == number_of_tasks) {
// All the AJAX tasks have finished so we can get on with it.
run_when_all_done();
}
}
})(do_something_wonderful, 11);