在搜索对话框中添加新运算符
Adding a new operator in the search dialog
作为过滤器运算符,您可以从以下选项中进行选择:
'equal','not equal','less','less or equal','greater','greater or equal','begins with','does not begin with','is in'、'is not in'、'ends with'、'does not end with'、'contains' 和 'does not contain'。
我想在此列表中添加一个额外的操作员。有人能指出我实现这一目标的正确方向吗?
应用程序正在使用对话框进行过滤,我们目前(非常高兴!)使用 free-jqgrid 4.15.0。
如果您想了解用例:我们的应用程序有一个日期字段,一个非常常见的过滤器是过滤记录 "due within X days from now"。为了获得最佳可用性,我们不喜欢用户必须每天更改日期过滤器。
免费的 jqGrid 允许根据 customSortOperations
选项定义自定义 searching/filtering 操作。默认情况下,相应的自定义比较操作将有两个操作数。应在 customUnaryOperations
选项中另外指定一元运算。该功能最初在 the wiki article 中进行了描述。可以在 Whosebug 上找到一些使用该功能的示例。
customSortOperations
中定义的自定义compare/filter运算符需要包含在数组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"("is empty")和"nm" ("isn't empty") 是一元运算。我从我的旧答案中得到代码: and .
自定义操作在搜索工具栏和搜索对话框中可用:
我认为这是您需要的功能。我建议您另外阅读 another answer,这接近您的要求。我认为简单修改代码就可以解决你的问题。
作为过滤器运算符,您可以从以下选项中进行选择: 'equal','not equal','less','less or equal','greater','greater or equal','begins with','does not begin with','is in'、'is not in'、'ends with'、'does not end with'、'contains' 和 'does not contain'。 我想在此列表中添加一个额外的操作员。有人能指出我实现这一目标的正确方向吗?
应用程序正在使用对话框进行过滤,我们目前(非常高兴!)使用 free-jqgrid 4.15.0。
如果您想了解用例:我们的应用程序有一个日期字段,一个非常常见的过滤器是过滤记录 "due within X days from now"。为了获得最佳可用性,我们不喜欢用户必须每天更改日期过滤器。
免费的 jqGrid 允许根据 customSortOperations
选项定义自定义 searching/filtering 操作。默认情况下,相应的自定义比较操作将有两个操作数。应在 customUnaryOperations
选项中另外指定一元运算。该功能最初在 the wiki article 中进行了描述。可以在 Whosebug 上找到一些使用该功能的示例。
customSortOperations
中定义的自定义compare/filter运算符需要包含在数组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"("is empty")和"nm" ("isn't empty") 是一元运算。我从我的旧答案中得到代码:
自定义操作在搜索工具栏和搜索对话框中可用:
我认为这是您需要的功能。我建议您另外阅读 another answer,这接近您的要求。我认为简单修改代码就可以解决你的问题。