0

フォームに複数の jqGrid があります。私のフォームの複数のjqGridの場合、jqGrid定義の内容を持つjsファイルを含めることでそれを達成しています。そのjsファイルの内容は次のとおりです。

var MyGridData = MyGridData || (function () {
    var _args = {};
    return {
        init: function (Args){
            _args = Args;
        },
        initiateGrid: function (){
            this.fillGridSchema(_args[6]);
        },
        fillGridSchema: function (){
            $('#' + _args[0]).jqGrid({
                url: _args[1],
                datatype: "json",
                mtype: "POST",
                ajaxGridOptions: {contentType: 'application/json; charset=utf-8' },
                serializeGridData: function(postdata){
                    return JSON.stringify(postdata);
                },
                postData: {colOrder: _args[2], data: _args[3]},
                search: true,
                colNames: _args[4],
                colModel: _args[5],
                viewrecords: true,
                pager: jQuery('#pager_' + _args[7]),
                rowNum: 10,
                rowList: [10, 20, 30, 40],
                //further required jqGrid properties here for ex: sortorder, //loadonce, gridview, ignorecase, etc.
                onSelectRow: function (rowId) {
                    if(_args[8] != ''){
                        var rowData = jQuery(this).getRowData(rowId);
                        var fn = window[_args[4]];
                        if(typeof fn === 'function'){
                            fn(rowData);
                        }
                    }
                }
            });
        }
    }
}

jqGrid を生成するために、次のコードが呼び出されます。

MyGridData.init([
    'GridName1', 'griddataurl', 'colOrder', 'postDataargs', 'colNames', 'colModel', 'ExtraParams', 'pager', 'onSelectRowfunction'
]);
MyGridData.initiateGrid();

今私が直面している問題は、1 番目のグリッドの行選択で 2 番目のグリッドを埋めていて、プログラムでグリッドの最初の行をデフォルトで選択していることです。したがって、1 番目のグリッドの最初の行が選択されている場合、1 番目のグリッドの onSelectRow で関数を呼び出して、その関数の最初のグリッドでの選択に従って 2 番目のグリッドを埋めます。しかし問題は、_args 引数が、最初のグリッドが初めて呼び出されたときに、最初のグリッドの引数を表示することです。2 回目に最初のグリッドの onSelectRow が呼び出されると、1 番目のグリッドの引数ではなく、2 番目のグリッド引数の値を持つ _args 引数が表示されます。私はそれで問題を見つけることができません。誰かが問題を見つけることができる場合は、これに対する解決策を教えてください。

4

1 に答える 1

0

申し訳ありませんが、上記のコードは好きではありません。両方のグリッドにいくつかの共通パラメータを使用する必要がある場合は、定義するだけです

$.extend(true, $.jgrid.defaults, {
    datatype: "json",
    mtype: "POST",
    ajaxGridOptions: {contentType: "application/json; charset=utf-8" },
    serializeGridData: function (postdata) {
        return JSON.stringify(postdata);
    },
    search: true,
    viewrecords: true,
    rowNum: 10,
    rowList: [10, 20, 30, 40],
    gridview: true,
    autoencode: true
});

その後、上記のオプションをスキップして両方のグリッドを作成できます。必要なことを行う短くて読みやすいコードを作成します。

ちなみに、最初のグリッドで行が選択された後、 2 番目のグリッドがロードされるようにします。この場合、最初に で 2 番目のグリッドを作成できますdatatype: "local"url2 番目のグリッドで指定されたリクエストの送信を防ぎます。onSelectRow最初のグリッド内でdatatype、2 番目のグリッドを動的に変更し、2 番目のグリッドを"json"設定postDataおよびトリガーできreloadGridます。なすべきことがすべてではありません。beforeRequest最初のグリッドの内側 (または の内側)で 2 番目のグリッドをクリアすることを検討できloadCompleteます。最初のグリッドを更新 (および選択解除) する 2 番目のグリッドをクリアします。

于 2015-05-19T09:10:06.977 に答える