В настоящее время в jqGrid нет событий или обратных вызовов, которые могли бы помочь вам уловить сворачивание или развертывание узлов дерева.
В целом код, который вы разместили, выполняет правильные тесты. Тем не менее, вы сами не полностью удовлетворены решением. Я нахожу это также не очень хорошим. Самая большая проблема, которую я вижу, заключается в том, что вы проверяете, какая иконка имеет кнопку, но иконка будет изменена исходным обработчиком тех же событий в сетке. Порядок привязок должен быть очень важным.
На вашем месте я предпочитаю использовать технику создания подклассов в тех случаях, когда нет событий Это очень просто, но на 100% эффективно.
Сетка дерева имеет методы expandNode и collapseNode , которые задокументированы. Метод также будет вызываться изнутри jqGrid в случае щелчка по значку узла. Метод expandNode
вызывает reloadGrid
для отображения развернутого дерева.
Поэтому я предлагаю добавить следующий код после создания Tree Grid:
var orgExpandNode = $.fn.jqGrid.expandNode,
orgCollapseNode = $.fn.jqGrid.collapseNode;
$.jgrid.extend({
expandNode: function (rc) {
alert('before expandNode: rowid="' + rc._id_ + '", name="' + rc.name + '"');
return orgExpandNode.call(this, rc);
},
collapseNode: function (rc) {
alert('before collapseNode: rowid="' + rc._id_ + '", name="' + rc.name + '"');
return orgCollapseNode.call(this, rc);
}
});
Результаты можно увидеть на демоверсии .
ОБНОВЛЕНО: Бесплатно jqGrid поддерживает обратные вызовы и события, что делает ненужным перезапись expandNode
и collapseNode
. Он поддерживает уже дополнительные обратные вызовы, вызываемые до или после расширения или свертывания узлов или строк. Имена обратных вызовов: treeGridBeforeExpandNode
, treeGridAfterExpandNode
, treeGridBeforeCollapseNode
, treeGridAfterCollapseNode
, treeGridBeforeExpandRow
, treeGridAfterExpandRow
, treeGridBeforeCollapseRow
, treeGridAfterCollapseRow
и соответствующие события jQuery jqGridTreeGridBeforeExpandNode
, jqGridTreeGridAfterExpandNode
, jqGridTreeGridBeforeCollapseNode
, jqGridTreeGridAfterCollapseNode
, jqGridTreeGridBeforeExpandRow
, jqGridTreeGridAfterExpandRow
, jqGridTreeGridBeforeCollapseRow
, jqGridTreeGridAfterCollapseRow
. Все обратные вызовы имеют один параметр: options
, который имеет два свойства: rowid
и item
. item
- это узел, который будет расширяться / сворачиваться.