我正在使用this demo在JqGrid的列中显示文本和下拉列表过滤器。网格有一个远程数据源,每个排序,过滤器或页面视图等都可以从远程数据源中获取数据。
我遇到的问题是,当新数据到达时,网格会刷新,过滤器会恢复为默认值。我看了Oleg博士的一些例子,但我无法使用远程数据和持久性。 datatype
到"local"
或loadonce
到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加载而不是每次请求只执行一次,那么这可能是朝着正确方向迈出的一步。
答案 0 :(得分:0)
答案很简单,直到第二天早上才出现给我。我只是在布尔检查中包含构建搜索栏的代码,因此它只加载一次。
// somewhere in the class
var gridLoaded = false;
// and in the JqGrid initialization
loadComplete: function (response) {
if (!gridLoaded) {
var options = colModelOptions, p, needRecreateSearchingToolbar = false;
if (options != null) {
for (p in options) {
console.log(p);
if (options.hasOwnProperty(p)) {
if (options[p].edittype === "select") {
options[p].editoptions.dataInit = initSelect2;
}
if (options[p].stype === "select") {
options[p].searchoptions.dataInit = initSelect2;
}
$(this).jqGrid("setColProp", p, options[p]);
if (this.ftoolbar) { // filter toolbar exist
needRecreateSearchingToolbar = true;
}
}
}
if (needRecreateSearchingToolbar) {
$(this).jqGrid("destroyFilterToolbar");
$(this).jqGrid("filterToolbar", filterToolbarOptions);
}
}
gridLoaded = true;
}
}
再次感谢Oleg博士的帮助。