jqGrid treeGrid catch раскрыть события свертывания
Я использую jqGrid для создания большого дерева. Теперь я хочу вспомнить развернутые и свернутые узлы в куки
Поэтому я хочу поймать развернуть и свернуть событие. Я не мог найти это в руководстве
Итак, я решил это таким образом
grid.find("div.treeclick").bind("click",function(e){
classes = $(this).attr('class');
//returns:
//ui-icon treeclick ui-icon-triangle-1-s tree-minus
//ui-icon treeclick ui-icon-triangle-1-e tree-plus
if(classes.indexOf('-minus') != -1)
alert ('Expand!');
else if(classes.indexOf('-plus') != -1)
alert ('Collaps!')
});
Кто-нибудь может предложить другой путь?
1 ответ
В настоящее время в jqGrid нет событий или обратных вызовов, которые могли бы помочь вам уловить сворачивание или расширение узлов дерева.
В целом код, который вы разместили, делает правильные тесты. Тем не менее, вы не полностью удовлетворены решением. Я нахожу это также не очень хорошим. Самая большая проблема, которую я вижу, заключается в том, что вы проверяете, какая иконка имеет кнопку, но иконка будет изменена исходным обработчиком тех же событий в сетке. Порядок привязок должен быть очень важным.
На вашем месте я предпочитаю использовать технику создания подклассов в тех случаях, когда нет событий. Это очень просто, но на 100% эффективно.
В Tree Grid есть методы 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);
}
});
Вы можете увидеть результаты на демо.
ОБНОВЛЕНО: Free jqGrid поддерживает обратные вызовы и события, что приводит к перезаписи expandNode
а также collapseNode
ненужный. Он поддерживает уже дополнительные обратные вызовы, вызываемые до или после расширения или свертывания узлов или строк. Имена обратных вызовов: treeGridBeforeExpandNode
, treeGridAfterExpandNode
, treeGridBeforeCollapseNode
, treeGridAfterCollapseNode
, treeGridBeforeExpandRow
, treeGridAfterExpandRow
, treeGridBeforeCollapseRow
, treeGridAfterCollapseRow
и соответствующие события jQuery jqGridTreeGridBeforeExpandNode
, jqGridTreeGridAfterExpandNode
, jqGridTreeGridBeforeCollapseNode
, jqGridTreeGridAfterCollapseNode
, jqGridTreeGridBeforeExpandRow
, jqGridTreeGridAfterExpandRow
, jqGridTreeGridBeforeCollapseRow
, jqGridTreeGridAfterCollapseRow
, Все обратные вызовы имеют один параметр: options
, который имеет два свойства: rowid
а также item
, item
это узел, который будет расширяться / сворачиваться.