预填充jqGrid高级搜索过滤器?

Evi*_*t7x 7 jqgrid

在search_config文档页面中,我看到有些东西看起来像是允许我指定一个默认值(defaultValue)来填充搜索字段,但我无法让它工作.我指定了一个默认值,但是当我拉出搜索框时,没有任何内容被填充.此外,我正在使用multipleGroup: true,所以这是先进的高级搜索模块,如果这有任何区别.

Evi*_*t7x 6

我通过浏览源代码来解决这个问题,因为我似乎无法找到维基或其他任何地方记录的功能,我将回答我自己的问题.jqGrid有一种创建默认搜索模板的方法,它非常有用.希望我的解释对其他人有用.

在创建jqGrid的searchGrid部分时$('#gridDiv').jqGrid('searchGrid', options);(或在创建navGrid部分时在searchGrid选项部分中$('#gridDiv').jqGrid('navGrid', '#navDiv', {}, {}, {}, {}, searchOptions);),我们关注两个选项,tmplNames和tmplFilters.

tmplNames只是模板名称应该是的字符串数组.这些将显示为将显示的模板选择框中的文本.有点像["Bob's Template", "Joe's Template"].

tmplFilters也是一个字符串数组,但这些字符串是jqGrid在搜索某些内容时发送给php脚本的JSON编码字符串.(tmplFilters也可以作为对象本身的数组,但我还没有尝试过)所以这样的事情.

{
  "groupOp":"AND",
  "rules":
  [
    {"field":"comnumber","op":"ge","data":"19000"},
    {"field":"expStatus.expStatID","op":"eq","data":"4"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

所以这一切实际上都非常简单,除了这仍然不包括设置默认模板.这仅适用于设置其他模板以供选择.jqGrid有一个预定义的默认模板,这是您最初打开搜索时出现的模板.要更改此设置,在创建jqGrid之后,您需要使用setGridParam并更改postdata属性

$('#jqGrid').setGridParam({
    postData: {
      filters: defaultFilter
    }
  });
Run Code Online (Sandbox Code Playgroud)

其中defaultFilter是与以前相同类型的JSON查询字符串.此外,如果单击"重置"按钮,此默认模板将消失,因此您需要在发生这种情况时再次设置它,这很容易通过在初始jqGrid调用中添加onReset函数来实现:

onReset: function () {
  $('#jqGrid').setGridParam({
    postData: {
      filters: defaultFilter
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

就是这样!通过使用AJAX和一些新按钮,我还能够从本地文件中读取模板,而不是在javascript中定义它们,并且还能够获取当前查询并在文件中创建/覆盖模板.然后他们变得非常有用.