Если я вас правильно понял, у вас очень близкая проблема, как описано в ответе . То, что вы пытаетесь сделать, похоже на то, что должно делать свойство expandOnLoad: true опции subGridOptions
. Как я описал в , ответ jqGrid не поддерживает очереди запросов Ajax. Если вы выполните
$("#myGridName").expandSubGridRow(ids[0]);
с удаленным datatype
или subgridtype
('json' или 'xml') запрос Ajax будет отправлен на сервер. До получения соответствующего ответа от сервера внутреннее свойство
$("#myGridName")[0].grid.hDiv.loading
будет установлен на true
, а все другие запросы Ajax, например, от $("#myGridName").expandSubGridRow(ids[1])
будут просто пропущены (игнорируются) .
Та же проблема (ошибка) существует в текущей реализации expandOnLoad: true
. Если вы откроете в официальную демонстрацию jqGrid узел дерева «Иерархия (4.0) новый», а затем посмотрите демонстрацию «Развернуть все строки при загрузке», вы увидите, что не все строки правильно развернуты как и было обещано (вы должны прокрутить сетку, чтобы увидеть все подсетки).
Я думаю, что для правильного осуществления расширения подсеток при загрузке нужно сделать следующее
- Вы должны изучить список свернутых подсеток (соответствующая строка имеет класс "sgcollapsed") и развернуть только первую найденную подсетку .
- Расширение следующей подсетки должно быть сделано только после того, как ответ от сервера будет получен и обработан .
Я могу порекомендовать вам использовать success
функцию обратного вызова опций ajaxSubgridOptions
jqGrid, поскольку после загрузки подсетки нет события loadComplete
. Текущая реализация запроса Ajax в подсетке использует complete
функцию обратного вызова jQuery.ajax (см. здесь ), которая будет вызываться до success
обратного вызова , Таким образом, вы можете определить свой обратный вызов success
как метод опции ajaxSubgridOptions
jqGrid. Внутри обратного вызова success
вы можете вызвать $("#myGridName").expandSubGridRow(ids[i])
для следующего узла (если он еще не раскрыт). В способе вы можете открыть все подсетки.
Для более эффективного перечисления подсетей может быть полезен ответ .