registerFilter

добавляет внешний фильтр определённому столбцу или полю данных

void registerFilter(HTMLElement|object object,object config,object controller);
objectHTMLElement|objectэлемент или объект контрола Webix
configobjectобъект с настройками (должен включать в себя уникальный columnId)
controllerobjectобъект с методами фильтра

Example

// регистрируем HTML поле как фильтр
grid.registerFilter(
  document.getElementById("myfilter"), 
    { columnId:"title" }, 
    {
        getValue:function(object){
            return object.value;
        },
        setValue:function(object, value){
            object.value = value;
        }
    }
);
 
// добавляем List
grid.registerFilter(
  $$("myfilter"),   // хранится как параметр 'list' в 'getValue'
  { columnId:"year" },  // столбец для фильтрования
  {
    getValue:function(list){
      var selection = list.getSelectedId();
      var item = list.getItem(selection)
      var filterValue = item.filter;
      return function(year){
        return year > filterValue
      }
    }
  }
);

Related samples

Details

В примере выше:

  • поле с ID='myfilter' становится фильтром для столбца с ID='title';
  • метод getValue у созданного фильтра получает значение из своего HTML узла и задаёт его в качестве параметра для фильтрации.

Требования

Во избежание несовместимостей, у каждого столбца/поля данных может быть только один фильтр (или внешний, или внутри хедера). Это значит, что каждый указанный columnId должен быть уникальным (любым уникальным ключом).

const table = $$("table");
table.registerFilter(
  someControl,
  { columnId:"any" },
  {
    // getValue, setValue...
  }
);
table.registerFilter(
  someOtherControl,
  { columnId:"dates" },
  {
    // getValue, setValue...
  }
);

Related sample:  Datatable: Adding new filters

The primary filter config may also contain the following properties: - compare - defines a custom comparing function, optional. - prepare - defines a custom function for data pre-processing, optional.

Контроллер

Когда вы регистрируете поле ввода/компонент в качестве фильтра, вы можете передать контроллер последним аргументом. Объект содержит поля для управления фильтром:

  • getValue() - обязательное поле. Возвращает текущее значение фильтра
  • setValue() - необязательное поле. Устанавливает новое значение фильтра
  • $server (boolean) - укажите значение true, чтобы зарегистрировать серверный фильтр. В этом случае локальные данные не будут участвовать в фильтрации, а текущее значение отправится на сервер. Вам также необходимо указать источник данных через свойство dataFeed (для компонента, дынные которого фильтруются).

Ниже представлен пример базового использования контроллера:

$$("grid").registerFilter(
  $$("textField"),  
  { columnId:"title" },
  // определяет контроллер
  {  
    getValue:function(view){
      return view.getValue();
    },
    setValue:function(view, value){
      view.setValue(value)
    }
  }
);

Related sample:  Datatable: Register Input as Filter

See also
Наверх
If you have not checked yet, be sure to visit site of our main product Webix mvc library and page of javascript datagrid library product.