これは、ここに投稿された以前の質問へのフォローアップです。Oleg の回答のおかげで、グリッドが正しく表示されるようになりました。ただし、ブートストラップ メニュー項目のクリックで別の URL を使用して jqgrid のデータを更新する必要があります。以下は私のコードです:
$("#menuitem").click(function(e){
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'});
$('#grid').trigger("reloadGrid");
});
ajax リクエストからデータを取得した後、メニュー オプションが動的に追加されます。リロードがトリガーされると、グリッドがリロードされているように見えます。ただし、パラメーター セットが異なる新しい URL ではなく、古い URL ('/getdata') からデータを取得しているようです。ここに記載されている解決策も試しましたが、メニュー項目を動的に追加したため、私の場合はうまくいきませんでした。
どんな助けでも大歓迎です。
編集:firebugのページリクエストを見ました。メニュー項目をクリックしてもリクエストが表示されません。私も追加しました
$("#list").jqGrid('GridUnload');
この質問への回答で述べたように、クリック ハンドラー関数に。それは私のためにグリッドをクリアしましたが、リロードしませんでした. そこで、そこに jqgrid のコードを追加すると、それが機能し、jqgrid が新しいデータで表示されます。したがって、変更を加えた私のコードは次のようになります。
$("#menuitem").click(function(e){
$("#list").jqGrid('GridUnload');
$("#grid").jqGrid({
url: '/getdata?id=1234&name=val.text'',
datatype: "json",
colNames: ['data'],
colModel: [
{name: 'data', align: 'center'}
],
jsonReader: {
root: "logs",
cell: "",
id: function () {
return function () {
return $.jgrid.randId();
}
},
page: function() { return 1; },
total: function() { return 1; },
records: function(obj) { return obj.logs.length; }
},
loadonce: true,
viewrecords: true,
autowidth: true,
ignoreCase: true,
height: "auto",
rowNum: 999,
autoencode: true,
beforeProcessing: function (data) {
var items = data.data.data.split("\n"), i, l, item;
data.logs = [];
for (i = 0, l = items.length; i < l; i++) {
item = $.trim(items[i]);
if (item.length > 0) {
data.logs.push([item]);
}
}
}
}).jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch: "cn"});
});
これを行うより良い方法はありますか。それは何をしているのか面倒で重すぎるように見えます。リロード グリッドを機能させる方法はありますか? これは内部で起こっていることだと思いますが、プラグインを使用するとコードが多すぎるようです。
ありがとう、
アシャ