2

2つのレベルの基本的なツリーグリッドがあり、一部の行を非表示にし、他の行を表示したい。プログラムで$( "#" + rowId).hide()と$( "#" + rowId).show()を使用してこれを行います。表示される行は、グリッド外のデータに依存するためです。その部分は正常に機能します。

ただし、ノードを折りたたんで展開すると、非表示にした子も含め、すべての子が表示されます。明らかに、jqGridは行に対して.hide()と.show()を実行しているだけなので、設定が無効になります。したがって、私の考えは、各行に非表示フィールドを追加して、表示するかどうかを格納し、展開イベントの後に再非表示/表示することです。問題は、イベントをキャッチしてその直後にコードを実行する方法がわからないことです。

Olegは、ここでイベントをキャッチする方法を示しています。jqGrid treeGrid catchExpandcollapsイベント

残念ながら、それは私がそこで行うすべての非表示/表示をオーバーライドするだけなので、私には機能しません。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にが1つのノードがありますがid="1_1_1"、常に非表示のままです。

更新: 無料のjqGridにはbeforeExpandRow、、、およびコールバックと、、、、イベントがあります。したがって、使用量のないjqGridの場合、上記のTreeGridメソッドのサブクラス化は必要ありません。afterExpandRowbeforeExpandNodeafterExpandNode"jqGridTreeGridBeforeExpandRow""jqGridTreeGridAfterExpandRow""jqGridTreeGridBeforeExpandNode""jqGridTreeGridAfterExpandNode"

于 2013-03-07T22:40:34.243 に答える