我有一个包含2个级别的基本treegrid,我希望隐藏一些行,其他行可见;我用$(“#”+ rowId).hide()和$(“#”+ rowId).show()以编程方式执行此操作,因为哪些行可见取决于网格外的数据。那部分工作正常。
然而,当我折叠一个节点然后展开它时,所有的孩子都可见,甚至是我隐藏的那些孩子。显然,jqGrid几乎就是在行上执行.hide()和.show(),这会否定我的设置。所以我的想法是在每一行中添加一个隐藏字段,用于存储它是否应该可见,然后在展开事件后重新隐藏/显示。问题是,我不确定如何捕获事件并在其后立即执行代码。
Oleg在此处显示了捕获事件的方法:jqGrid treeGrid catch expand collaps events
不幸的是,这对我不起作用,因为它只会覆盖我在那里做的任何隐藏/显示。我需要在jqGrid函数之后执行代码。关于如何做到这一点的任何想法?
答案 0 :(得分:3)
解决方案对我来说似乎很容易。只需对您引用的the answer代码进行少量修改即可。您可以执行以下操作
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
}
});
见the demo。该演示在TreeGrid中有一个节点id="1_1_1"
,但它始终处于隐藏状态。
更新: Free jqGrid有beforeExpandRow
,afterExpandRow
,beforeExpandNode
和afterExpandNode
个回调以及"jqGridTreeGridBeforeExpandRow"
,{ {1}},"jqGridTreeGridAfterExpandRow"
,"jqGridTreeGridBeforeExpandNode"
个事件。因此,在使用免费的jqGrid的情况下,不需要对上述TreeGrid方法进行子类化。