jqGrid treeGrid catch раскрыть события свертывания - PullRequest
3 голосов
/ 07 февраля 2012

Я использую jqGrid для создания большого дерева.Теперь я хочу вспомнить развернутые и свернутые узлы в файлах cookie

, поэтому я хочу отследить событие раскрытия и свертывания.Я не смог найти его в руководстве

Так что я решил это следующим образом

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 Ответ

9 голосов
/ 07 февраля 2012

В настоящее время в 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 - это узел, который будет расширяться / сворачиваться.

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