Добавление нового оператора в диалог поиска - PullRequest
2 голосов
/ 29 марта 2019

В качестве оператора фильтра вы можете выбрать один из следующих: «равно», «не равно», «меньше», «меньше или равно», «больше», «больше или равно», «начинается с», «не начинается»с ',' в ',' не в ',' заканчивается ',' не заканчивается ',' содержит 'и' не содержит '.Я хотел бы добавить дополнительный оператор в этот список.Может кто-нибудь указать мне правильное направление для достижения этой цели?

Приложение фильтрует с помощью диалогового окна, и в настоящее время мы (очень счастливо!) Используем free-jqgrid 4.15.0.

InЕсли вас интересует вариант использования: в нашем приложении есть поле даты, и очень распространенным фильтром является фильтрация записей «в течение X дней».Для лучшего удобства использования нам не нужно, чтобы пользователи каждый день меняли фильтр даты.

1 Ответ

0 голосов
/ 29 марта 2019

Free jqGrid позволяет определить пользовательскую операцию поиска / фильтрации в отношении опции customSortOperations.По умолчанию соответствующая пользовательская операция сравнения будет иметь два операнда.Унарные операции должны указываться в опции customUnaryOperations дополнительно.Эта функция изначально описана в статье вики .Можно найти несколько примеров использования функции в стеке потока.

Пользовательские операторы сравнения / фильтрации, определенные в customSortOperations, должны быть включены в определение соответствующего столбца в массиве searchoptions.sopt. Демо использует следующий код:

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» («not empty») являются унарными операциями.Я получаю код из моих старых ответов: этот и другой .

Пользовательские операции доступны на панели инструментов поиска и в диалоговом окне поиска: enter image description here

Я думаю, что это функция, которая вам нужна.Я бы порекомендовал вам дополнительно прочитать другой ответ , который соответствует вашим требованиям.Я думаю, что простая модификация кода может решить вашу проблему.

...