在搜索对话框中添加新运算符

问题描述 投票:2回答:1

作为过滤运算符,您可以选择:“相等”,“不相等”,“较少”,“较少或相等”,“较大”,“大于或等于”,“以...开头”,“不以...开头”, '在','不在','以'结尾','不以'结尾','包含'和'不包含'。我想在此列表中添加一个额外的运算符。有人能指出我正确的方向来实现这一目标吗?

应用程序正在使用对话框进行过滤,我们目前(非常高兴!)使用free-jqgrid 4.15.0。

如果你想知道用例:我们的应用程序有一个日期字段,一个非常常见的过滤器是过滤“从现在起X天内到期”的记录。为了获得最佳可用性,我们不希望用户每天都必须更改日期过滤器。

jqgrid free-jqgrid
1个回答
0
投票

免费的jqGrid允许定义关于customSortOperations选项的自定义搜索/过滤操作。默认情况下,相应的自定义比较操作将具有两个操作数。应在customUnaryOperations选项中另外指定一元操作。该功能最初在the wiki article中描述。可以在stackoverflow上找到一些使用该功能的示例。

customSortOperations中定义的自定义比较/过滤运算符需要包含在数组searchoptions.sopt中相应列的定义中。 The demo使用以下代码:

colModel: [
    ...
    { name: "name", align: "justify", width: 87, editrules: { required: true },
      autoResizing: { minColWidth: 87 },
      createColumnIndex: true,
      searchoptions: {
        generateDatalist: true,
        sopt: [ "cn", "em", "nm", "in", "ni",
            "teq", "tne",
            "eq", "bw", "ew", "bn", "nc", "en" ],
        clearSearch: true
      } },
    ...
],
customUnaryOperations: ["em", "nm"],
customSortOperations: {
    em: {
      operand: "=''",
      text: "is empty",
      filter: function (options) {
        var v = options.item[options.cmName];
        if (v === undefined || v === null || v === "") {
          return true;
        }
      }
    },
    nm: {
      operand: "!=''",
      text: "isn't empty",
      filter: function (options) {
        var v = options.item[options.cmName];
        if (v !== undefined && v !== null && v !== "") {
          return true;
        }
      }
    },
    teq: {
        operand: "==",
        text: "Turkish insensitive \"equal\"",
        filter: function (options) {
            var fieldData = String(options.item[options.cmName]).replace(/i/g,'İ').toUpperCase(),
                searchValue = options.searchValue.replace(/i/g,'İ').toUpperCase();
            return fieldData === searchValue;
        }
    },
    tne: {
        operand: "!=",
        text: "Turkish insensitive \"not equal\"",
        filter: function (options) {
            var fieldData = String(options.item[options.cmName]).replace(/i/g,'İ').toUpperCase(),
                searchValue = options.searchValue.replace(/i/g,'İ').toUpperCase();
            return fieldData !== searchValue;
        }
    }
},

该代码定义了4个自定义操作:“em”,“nm”,“teq”,“tne”,其中“em”(“为空”)和“nm”(“非空”)是一元操作。我从旧答案中得到了代码:this oneanother one

搜索工具栏和搜索对话框中提供了自定义操作:enter image description here

我认为这是你需要的功能。我建议你另外阅读another answer,这很接近你的要求。我认为对代码的简单修改可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.