このデモを使用して、JqGrid の列にテキストとドロップダウン リスト フィルターを表示しています。グリッドにはリモート データ ソースがあり、各並べ替え、フィルター、またはページ ビューなどで、リモート ソースからデータを取得します。
私が抱えている問題は、新しいデータが到着するとグリッドが更新され、フィルターがデフォルトに戻ることです。オレグ博士によるいくつかの例を見てきましたが、リモートデータと永続性で動作させることができません。datatype
to"local"
またはloadonce
to を設定するとtrue
、リモート データソースが壊れます。
これを機能させる方法のアイデアはありますか?
私は次のことを試しましたが、私が言ったように、これはJqGridがAPIリクエストを行うのを止めます:
loadComplete: function () {
var $this = $(this);
var postfilt = $this.jqGrid('getGridParam', 'postData').filters;
var postsord = $this.jqGrid('getGridParam', 'postData').sord;
var postsort = $this.jqGrid('getGridParam', 'postData').sidx;
var postpage = $this.jqGrid('getGridParam', 'postData').page;
console.log(postfilt);
console.log(postsord);
console.log(postsort);
console.log(postsort);*/
if ($this.jqGrid("getGridParam", "datatype") === "json") {
setTimeout(function () {
$this.jqGrid("setGridParam", {
datatype: "local",
postData: { filters: postfilt, sord: postsord, sidx: postsort },
search: true
});
$this.trigger("reloadGrid", [{ page: postpage}]);
}, 25);
}
}
select2
問題はドロップダウンメニューに関係していると思います。ここでは、フィルタ メニューが破棄され、再作成されていることがわかります。
var options = colModelOptions, p, needRecreateSearchingToolbar = false;
if (options != null) {
for (p in options) {
if (options.hasOwnProperty(p)) {
if (options[p].edittype === "select") {
options[p].editoptions.dataInit = initSelect2;
}
if (options[p].stype === "select") {
options[p].searchoptions.dataInit = initSelect2;
}
$grid.jqGrid("setColProp", p, options[p]);
if (this.ftoolbar) { // filter toolbar exist
needRecreateSearchingToolbar = true;
}
}
}
if (needRecreateSearchingToolbar) {
$grid.jqGrid("destroyFilterToolbar");
$grid.jqGrid("filterToolbar", filterToolbarOptions);
}
}
リクエストごとではなく、JqGrid の読み込みごとに 1 回だけこれを実行できる方法があれば、それは正しい方向への一歩かもしれません。