非表示の列は、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
ます。そのようなコードの例については、回答を参照してください。