#javascript #performance #datagrid #slickgrid
#javascript #Производительность #datagrid #slickgrid
Вопрос:
Реализованный пользовательский фильтр работает хорошо, но я сталкиваюсь с проблемой производительности с SlickGrid js. После применения пользовательского фильтра и добавления нового целого в сетку фильтр снова применяется ко всему (уже) отфильтрованному результирующему набору. На мой взгляд, фильтр должен применяться только к этому добавленному элементу.
Я просмотрел документацию, но не смог найти ни малейшего намека на то, как можно контролировать это поведение.
У кого-нибудь есть какие-либо идеи или сталкивался с той же проблемой?
Заранее спасибо
Ответ №1:
Предположим, вы используете DataView, поэтому алгоритм фильтрации по существу:
var idx = 0;
for (var i = 0, ii = items.length; i < ii; i ) {
if (filter(items[i], filterArgs, dataView, i)) {
filteredItems[idx ] = items[i];
}
}
filteredItems
Переменная является локальной для DataView, поэтому вам нужно либо изменить DataView, либо предоставить его с помощью getter, а затем:
if (filter(items[newItemIndex], filterArgs, dataView, newItemIndex)) {
filteredItems[filteredItems.length] = items[newItemIndex];
}
или вы можете добавить новый метод в DataView специально для этого варианта использования.
Или вы могли бы добавить второй параметр к addItem
методу, скажем addToFilter
, для выполнения этой функции до refresh()
того, как это произойдет там.