0

大量のデータを表示する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}]);
        }

誰かが私を助けてくれますか?どうもありがとう。

4

1 に答える 1