Расширение нескольких узлов jqgrid treegrid - PullRequest
1 голос
/ 24 января 2012

Я использую treegrid jqgrid, и данные для дочерних узлов загружаются по запросу.Но когда пользователь нажимает на узел (скажем, узел1), чтобы развернуть его, и сразу же щелкает на другом узле (скажем, узел2), тогда дочерние элементы первого узла (узел1) отображаются для второго узла (узел2), значок узла2 меняется напоказать как развернутое, но у него есть данные о дочерних узлах узла 1, а сворачивающийся узел 2 ничего не делает, но свернутый узел 1 сворачивает дочерние узлы узла 1, которые отображаются как дочерние узлы узла 2.

Кто-то еще сталкивался с такой проблемой?данные для jqgrid - это модель смежности в формате json.

1 Ответ

1 голос
/ 24 января 2012

Это похоже на ошибку в jqGrid.Я заглянул в код и, кажется, понял проблему.

Каждый раз, когда пользователь нажимает на значок «развернуть» , будет выполняться код , который вызывает expandRow и expandNodeметоды.Код expandNode сначала перезаписывает текущее значение параметра treeANode в jqGrid, которое используется для внутренней идентификации строки, после которой будут добавлены новые данные.Затем будут установлены параметры nodeid, parentid (или n_left и n_right для сеточной модели 'nested') и n_level нового запроса к серверу, после чего будет reloadGrid

Проблема в том, что позже , во время обработки reloadGrid в начале внутреннего populate метода, будет проверено внутреннее свойство .grid.hDiv.loading, и если онобыл установлен как предыдущий все еще ожидающий запрос , тогда вторая перезагрузка сетки будет пропущена.Проблема в том, что значение параметра treeANode уже изменено.Таким образом, элементы, возвращаемые как дочерние элементы первого расширяющегося узла, будут добавлены как clidren последнего нажатого узла.

В качестве исправления ошибки я предлагаю изменить строку кода для следующего

} else if (!this.grid.hDiv.loading) {

Таким образом, параметр treeANode не будет перезаписан щелчком по секунде, если другой ожидающий запрос еще обрабатывается.

Вы можете скачать с здесь модифицированную версию jquery.jqGrid.src.js и проверьте, будет ли проблема решена после исправления ошибки.Если это решит проблему, я выложу соответствующий отчет об ошибке с моим предложением, как исправить проблему на форуме trirand .

В качестве другого обходного пути вы можете использовать опцию loadui: 'block'jqGrid, который не позволит взаимодействовать с пользователем во время обработки ожидающих запросов к серверу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...