jqGrid中目前沒有任何事件或回調,它可以幫助您捕捉摺疊或展開樹節點。
一般而言,您發佈的代碼會執行正確的測試。儘管如此,你自己並沒有完全滿意解決方案。我覺得它也不太好。我看到的最大問題是您測試哪個圖標具有按鈕,但該圖標將由網格中相同事件的原始處理程序更改。綁定的順序應該非常重要。
在你的地方,我更喜歡在沒有事件存在的情況下使用子類化技術。這很容易,但它是100%有效的。
樹網格有方法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);
}
});
你可以看到the demo結果。
更新: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
是節點,它將展開/摺疊。
謝謝,奧列格 – dr0zd 2012-02-08 08:47:11
@ gv0zd:歡迎您!我將發佈的建議,引進'beforeExpandNode'和'boforeCollapseNode'如[在trirand論壇]的功能要求(http://www.trirand.com/blog/?page_id=393/feature-request/)。希望它會包含在下一個版本的jaGrid中。 – Oleg 2012-02-08 08:58:50
謝謝你,奧列格你已經救了我一天 – 2012-07-25 07:36:57