В jQuery есть возможность установить синхронность вызовов AJAX:
async: false
Есть ли способ сделать это в плагине jqGrid?
Если сделать шаг назад,Реальная проблема, которую я пытаюсь решить (и, возможно, есть гораздо лучший способ сделать это), состоит в том, чтобы добавить кнопку «Развернуть все» над 3-уровневой структурой вложенной сетки.Мой первоначальный подход заключается в следующем:
$('#buttonExpandAll').click(function() {
// Get all the rows in the top grid
var rows = $('#mainGrid').getRowData();
for (var i = 0; i < rows.length; i++) {
// Expand the sub-grid for this row
$('#mainGrid').expandSubGridRow(rows[i].Id);
// Get all the rows for the sub-grid
// NOTE: This isn't working because it the data hasn't asynchronously loaded yet
var subrows = $('#mainGrid_' + rows[i].Id + '_t').getRowData();
for (var j = 0; j < subrows.length; j++) {
// Expand the sub-sub-grid for this sub-row
$('#mainGrid_' + rows[i].Id + '_t').expandSubGridRow(subrows[j].Id);
}
}
});
Как вы можете себе представить, он прекрасно расширяет первый уровень вложенных таблиц.Однако цикл уже завершился до того, как эти вложенные таблицы получили свои данные из соответствующих вызовов AJAX.Таким образом, внутренний цикл не имеет записей во время его вызова.
Есть ли чистый способ "развернуть все" в структуре вложенных таблиц в jqGrid?Я понимаю, что синхронизация всех вызовов - это проблема производительности, но, по крайней мере, сейчас это, вероятно, не проблема, или, по крайней мере, может быть меньшее из двух зол.