1

さて、私はちょうど私の髪を引き裂く準備ができています。JSONデータを使用してjqGridをロードしていますが、ローカルに保つために「loadonce」をtrueに設定しています。列のデフォルトの内容を表示するだけで並べ替えは正常に機能しますが、必要なのは、一部の列が別の列の情報を使用して表示内容を変更することです。たとえば、「デバイス」列と「モデル」列を用意する代わりに、この「デバイス-モデル」のように両方を1つの列の下に表示したいので、そのためにカスタムフォーマッターを使用します。

問題は、この場合、ソートすると「モデル」情報が失われ、「未定義」になることです。これが私のコードの一部です:

mdlTable = tableWrap.jqGrid({
    url: loadURL,
    datatype: 'json',
    colNames: ['ID', 'Device', 'Description', 'IP', 'Model'],
    colModel: [
        {name:'id', index:'id', hidden:true, key:true},
        {name:'device', index:'device', width:192,
            formatter:function(value, options, rData){
                var str = "<a href='/administration/mdl/vwDevice.aspx?device_id=";
                str += rData[0] + "' target='_blank'>" + value;
                if ('' != rData[4]) str += " - " + rData[4];
                str += "</a>";
                return str;
            }
        },
        {name:'desc', index:'desc', width:256, sortable:false},
        {name:'ip', index:'ip', width:96},
        {name:'model', index:'model', hidden:true}
    ],
    sortname: 'id',
    viewrecords: true,
    loadonce: true,
    viewsortcols: [true,'vertical',true],
    gridview: true,
    ignoreCase: true
})
.navGrid('#deviceList_footer', {edit:false, add:false, del:false, cloneToTop:true});

ご覧のとおり、モデル列を非表示にし、その情報をデバイス列に「移動」します。これは、デバイス列に表示されるはずだからです。ロード時にはすべて問題ありませんが、並べ替えまたは検索を実行してビューを更新するとすぐに、何らかの理由でデータの「コピー」が失われます。モデル列に情報を表示すると、問題はありません。「未定義」の値を取得するのはデバイス列だけです。

「reloadGrid」をトリガーしてみましたが、役に立ちません。unformat関数も追加しようとしましたが、そこで何ができるかわかりません。私は基本的に$(cellobject).html()を返しました-それは明らかに機能しませんでした。

編集:サンプルJSONデータを追加しました

{ "rows" : [{
        "id" : "181",
        "cell" : ["181", "Router A", "some description", "55.444.33.222", "Model 1"]
    }, {
        "id" : "291",
        "cell" : ["291", "Router B", "some description", "55.333.22.444", "Model 2"]
    }, {
        "id" : "1346",
        "cell" : ["1346", "Router C", "some description", "55.111.44.333", "Model 3"]
    }, {
        "id" : "1999",
        "cell" : ["1999", "Router D", "some description", "55.222.11.000", "Model 4"]
    }
]}
4

1 に答える 1

7

問題は、最初はカスタムフォーマッタの3番目のパラメータが配列型であり、後でそれ以上にならないことです。したがって、フォーマッタを次のようなものに変更する必要があります

formatter: function(value, options, rData){
    var model = '',
        str = "<a href='/administration/mdl/vwDevice.aspx?device_id=" +
              value + "' target='_blank'>" + value;
    if ($.isArray(rData)) {
        model = rData[4];
    } else {
        model = rData.model;
    }
    if (model) {
        str += " - " + model;
    }
    str += "</a>";
    return str;
}

その後、並べ替えが機能します。ここを参照してください。

もう1つのヒント。key:true列のプロパティを使用しidます。id同じ値を2回含める必要がない場合。JSONデータを次のように減らすことができます

{ "rows" : [
    ["181", "Router A", "some description", "55.444.33.222", "Model 1"],
    ["291", "Router B", "some description", "55.333.22.444", "Model 2"],
    ["1346", "Router C", "some description", "55.111.44.333", "Model 3"],
    ["1999", "Router D", "some description", "55.222.11.000", "Model 4"]
]}

新しいJSON形式を読み取れるようにするためのjqGridの唯一の変更は、追加のパラメーターjsonReader: {cell:''}です。ここで結果を参照してください。

于 2011-07-12T16:55:54.863 に答える