2

我有一个有 2 个级别的基本树形网格,我希望隐藏一些行,而其他行可见;我以编程方式使用 $("#" + rowId).hide() 和 $("#" + rowId).show() 执行此操作,因为哪些行可见取决于网格外的数据。那部分工作正常。

但是,当我折叠一个节点然后展开它时,所有子节点都是可见的,即使是我隐藏的节点。显然,jqGrid 几乎只是在行上执行 .hide() 和 .show() ,这否定了我的设置。所以我的想法是在每一行中添加一个隐藏字段来存储它是否应该可见,然后在展开事件之后重新隐藏/显示。问题是,我不确定如何捕获事件并在它之后立即执行代码。

Oleg 在这里展示了一种捕获事件的方法:jqGrid treeGrid catch expand collaps events

不幸的是,这对我不起作用,因为它只会覆盖我在那里所做的任何隐藏/显示。我需要在 jqGrid 函数之后执行代码。关于如何做到这一点的任何想法?

4

1 回答 1

3

解决方案对我来说似乎很容易。只需对您引用的答案中的代码进行少量修改。您可以执行以下操作

var orgExpandNode = $.fn.jqGrid.expandNode;
$.jgrid.extend({
    expandNode: function (rc) {
        // here you can insert the code which will be executed
        // before the original expandNode
        var res = orgExpandNode.call(this, rc);

        // now you can execute some code after the original expandNode
        // for example the next line hide the node in the grid
        $("#1_1_1").hide(); // hide some row of the grid

        return res; // return the value from expandNode
    }
});

演示。该演示在 TreeGrid 中有一个节点,该节点具有id="1_1_1",但它一直处于隐藏状态。

更新: 免费 jqGridbeforeExpandRow, afterExpandRow,beforeExpandNodeafterExpandNode回调和"jqGridTreeGridBeforeExpandRow", "jqGridTreeGridAfterExpandRow", "jqGridTreeGridBeforeExpandNode","jqGridTreeGridAfterExpandNode"事件。因此,在使用免费 jqGrid 的情况下,不需要对上述 TreeGrid 方法进行子类化。

于 2013-03-07T22:40:34.243 回答