jqGrid treeGrid catch展开collaps事件
我使用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!') });
有人可以提出另一种方式吗?
目前jqGrid中没有事件或回调可以帮助您捕获树节点的折叠或扩展。
通常,您发布的代码会进行正确的测试。 然而,你自己并不完全满意解决方案。 我发现它也不太好。 我看到的最大问题是你测试哪个图标有按钮,但图标将由网格中相同事件的原始处理程序更改。 绑定的顺序应该非常重要。
在没有事件存在的情况下,我更喜欢使用子类化技术。 这很容易,但它100%有效。
Tree Grid有方法expandNode和collapseNode ,这些方法都有记录。 如果点击节点图标,该方法也将由jqGrid在内部调用。 方法expandNode
调用reloadGrid
来显示展开的树。
所以我建议在创建树网格后添加以下代码:
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
是节点,将进行扩展/折叠。