大量のデータを表示するjqgridがあります。データは、jquery ajax呼び出し(jqgridロジックの外部)を介してサーバーから定期的に取得されます。取得されたデータは、以前に再試行されたデータと比較されます(jsにvarとして保存されます。jqgridのデータとして提供されます)。それらが異なる場合は、ローカルデータが更新され、jqgridをトリガーしてリロードします。jqgridデータ型はjsonstringです。
このソリューションは、ユーザーがフィルターツールバーにフィルター値を持っている場合を除いて、非常にうまく機能しています。loadcompleteイベントでフィルターをトリガーするためにタイマーを0.1秒に設定したため、フィルター文字列がある場合のグリッド全体の更新は次のようになります。
- 元々jqgridに20個のレコードが表示されていました(ユーザーが列の特定の値でフィルタリングしているため)
- 分離されたajax呼び出しによってサーバーからポーリングされたデータは、ブラウザーに保存されているデータとは異なるため、jqgridが更新されます。
- jqgridは、非常に短い期間ですべての新しいデータを表示します
- jqgridフィルターはloadcomplete内でトリガーされます。画面には再び20レコードが表示されます。
技術的にはまだ機能しています。しかし、グリッドが視覚化される前に、jsonstringにローカルでフィルターを再適用する方法はありますか?別の言い方をすれば、jqgridは一度だけ視覚化できますか?それは新しいjsonstingをロードし、同時に以前にフィルターボックスに配置されたフィルターを適用しますか?
ありがとうキャスビー
アップデート:
グリッドのリロード中にフィルターを適用するOlegのソリューションの1つを試しました。これはデモです。データ型がローカルである限り、完全に機能しました。私のページは実際にデータ型jsonstringを使用してグリッドをリロードします。コードからのこの関数は、jsonstringに適用されるようです。外部のjqueryajaxがサーバーからデータを正常に取得した後、このような関数を呼び出すことを望んでいました。
function filter() {
var searchFiler = $("#filter").val(), f;
if (searchFiler.length === 0) {
grid[0].p.search = false;
$.extend(grid[0].p.postData,{filters:""});
}
f = {groupOp:"OR",rules:[]};
f.rules.push({field:"name",op:"cn",data:searchFiler});
f.rules.push({field:"note",op:"cn",data:searchFiler});
grid[0].p.search = true;
$.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
grid.trigger("reloadGrid",[{page:1,current:true}]);
}
誰かが私を助けてくれますか?どうもありがとう。