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

Другие вопросы по тегам