Вот код кофейного кода, который я использую для достижения этого:
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()
)