Пользовательский фильтр SlickGrid — это итерация по уже отфильтрованному результирующему набору

#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() того, как это произойдет там.