3

リモート URL からの応答を受け取るようにjqgrid設定しました。JSONJSONが送り返しているフィールドの 1 つは、値の配列です。グリッド内の要素が選択されたときにアクセスできるように、この配列を非表示の列に格納しようとしていますがjqgrid、配列を string に変換しています[object Object]

jqgrid配列をそのままにしてアクセスできるようにする方法はありますか、getRowDataそれともサーバーで配列を文字列にエンコードしてからクライアントでデコードする必要がありますか?

4

1 に答える 1

2

非表示の列は、CSS スタイルを持つ単なる列ですdisplay: none。内の HTML ページにオブジェクトを配置することはできません<td>...</td>。そのため、オブジェクトはメソッドを呼び出すことによって自動的に文字列に変換されますtoString

本当に必要なのは、オブジェクト (配列など) をどこかに保存することです。ユーザーが後でグリッドの行を選択すると、コールバックonSelectRowが呼び出されます。コールバックには、パラメーターとして rowid があります。そのため、カスタム情報を行 ID による辞書 (オブジェクト) として保存するのが最善です。

rowsオプションの 1 つは、サーバー応答の一部ではなく、代わりに追加情報を送信することuserdataです。たとえば、現在次の形式でデータを送信しようとしています

{
    "page": 1
    "total": 7
    "records": 123
    "rows": [
        {"id": 10, "cell": ["cell11", "cell12", "cell13", [1, 2, 3]]}
        {"id": 20, "cell": ["cell11", "cell12", "cell13", [4, 5, 6]]},
        ...
        {"id": 90, "cell": ["cell11", "cell12", "cell13", [9, 8, 7]]}
    ]
}

サーバーの応答を変更できます

{
    "page": 1
    "total": 7
    "records": 123
    "rows": [
        {"id": 10, "cell": ["cell11", "cell12", "cell13", [1, 2, 3]]}
        {"id": 20, "cell": ["cell11", "cell12", "cell13", [4, 5, 6]]},
        ...
        {"id": 90, "cell": ["cell11", "cell12", "cell13", [9, 8, 7]]}
    ],
    "userdata": {
        "10": [1, 2, 3],
        "20": [4, 5, 6],
        ...
        "90": [9, 8, 7]
    }
}

その場合、そのuserdata部分はjqGridによって内部パラメーター内に自動的に保存されますuserData(JSONデータの「userdata」と"userData"パラメーターとしての大文字と小文字の使用には注意してください)。

これで、次の方法で任意のコールバック内でカスタム データを取得できるようになります。

onSelectRow: function (rowid) {
    var custom = $(this).jqGrid("getGridParam", "userData");

    // custom[rowid] is the data from userdata like [4, 5, 6]
}

サーバーの応答を変更できない場合は、カスタム データをコールバックuserdata内の一部に移動できbeforeProcessingます。そのようなコードの例については、回答を参照してください。

于 2013-01-24T07:39:24.520 に答える