1

これは、ここに投稿された以前の質問へのフォローアップです。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"}); 

});

これを行うより良い方法はありますか。それは何をしているのか面倒で重すぎるように見えます。リロード グリッドを機能させる方法はありますか? これは内部で起こっていることだと思いますが、プラグインを使用するとコードが多すぎるようです。

ありがとう、

アシャ

4

2 に答える 2

2

まず、コードの構文エラーを修正する必要があります (エラーが質問のテキストだけでなく存在する場合):

url: '/getdata?id=1234&name=val.text'',

に置き換える必要があります

url: '/getdata?id=1234&name=val.text',

loadonce: trueサーバー側でデータのページングとフィルタリングを実装したくない、または実装できない場合に非常に実用的であり、jqGrid にこれを実行してもらいたい場合に、使用するために存在する主な問題があります。を使用する場合は、jqGrid がオリジナルdatatypeから"json"に変更されることを理解しておく必要があります。この変更により、グリッドのコンテンツを更新する次のすべての要求 (ページング、フィルタリング、並べ替えなど) は、サーバーへの要求なしでローカルに実装されます。グリッドをリロードする必要がある場合は、グリッドをリロードする前にtoの値をリセットする必要があります。次の場合、 の使用は必要ありません。"local"loadonce: truedatatype"json"GridUnload

$("#grid").jqGrid('setGridParam', {
    url: '/getdata?id=1234&name=val.text',
    datatype: "json"
}).trigger("reloadGrid");

ちなみに、パラメーターを変更urlする必要がある場合にのみ、パラメーターを設定する必要があります。以前と同じ URL でコンテンツをリロードするだけの場合は、リセットするだけで済みます。datatype: "json"

于 2013-01-11T09:17:45.267 に答える
1

これを試して

変化する

loadonce: true, 

loadonce: false, 

loadonce が問題だと思います

于 2013-01-11T05:07:48.400 に答える