Как выполнить частичное совпадение при фильтрации Slickgrid с использованием заголовков на уровне столбца? - PullRequest
3 голосов
/ 07 апреля 2011

При использовании фиксированной строки заголовка для реализации фильтров на уровне столбцов, как я могу вернуть ячейки с частичным совпадением?

, а именно: поисковый запрос: "omato"

возврат: автомат, помидор и т. Д.

Ответы [ 2 ]

5 голосов
/ 11 апреля 2011

В примере с MyFilter замените этот цикл ...

for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = grid.getColumns()[grid.getColumnIndex(columnId)];
        if (item[c.field] != columnFilters[columnId]) {
            return false;
        }
    }
}

с этим ..

for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = grid.getColumns()[grid.getColumnIndex(columnId)];
        if (item[c.field].indexOf(columnFilters[columnId]) == -1) {
            return false;
        }
    }
}

Кажется, теперь так очевидно:)

0 голосов
/ 27 февраля 2013

Вот код кофейного кода, который я использую для достижения этого:

filterGrid = (item) ->
    return true unless hasFilter
    grid.setSelectedRows([])
    columns = grid.getColumns()
    for columnId, filter of columnFilters
        if filter? 
            column = columns[grid.getColumnIndex(columnId)]
            field = item[column.field]
            return false unless (field? && field.toLowerCase().indexOf(filter.toLowerCase()) > -1) 
    return true

Строка grid.setSelectedRows([]) просто очищает все выбранные строки перед применением фильтра.Если вы этого не сделаете, то выбранные строки, которые вы видите на экране, не соответствуют основным выбранным строкам.

Что еще важнее, строка return true unless hasFilter предотвращает любые операции фильтрации во время загрузки сетки, если пользователь фактически не набрал текст в одном из полей.Я обнаружил, что это сильно влияет на производительность сетки при загрузке больших наборов данных в пакетах данных JSON через http.

Вот обработчик поля ввода, который устанавливает флаг hasFilter:

$(grid.getHeaderRow()).delegate(':input', 'change keyup', (e) ->
    columnId = $(this).data('columnId')
    if columnId?
        columnFilters[columnId] = $.trim($(this).val())
        hasFilter = true
        dataView.refresh()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...