Выпадающий список пользовательского фильтра. Редактирование. Прошу совет

Я хочу отредактировать выпадающий список пользовательского фильтра. Хочу совет как это сделать.

Выпадающий список для очистки  :

  

 

В 7.13 запрещено переопределять поведение такого фильтра, использовав наследование от ядра. То есть, возможности управлять столбцами entitySchema, которую использует фильтр при генерации, нет. Данные для элемента html приходят асинхронно, заполняя список. Это значит во время рендера схемы их пока нет. Я могу сделать свой компонент extjs , скрыв существующий, внести в пустой список нужные значения гуид столбцов и назначить для него признаки от оригинального то есть fake выпадающий список, выбранное пользователем значение из него будет задействовано в настоящем фильтре. Или использовать в схеме javascript таймер и вносить мои данные через пять секунд после наполнения страницы, тем самым перезаписав список, генерируемый схемой модели фильтра.

Разве нет простого решения отредактировать коллекцию элементов из списка ?

Это же типовая задача по оптимизации, она часто должна встречаться.  Были ли у вас какие-то наработки ? Я не нашел здесь

Нравится

1 комментарий

Этот список наполняется не в ядре, а в функции getSimpleFilterColumnList в схеме CustomFilterViewModelV2:

  function getSimpleFilterColumnList(filters, list) {
   list.clear();
   var columnList = {};
   var columnNames = [];
   var columns = this.entitySchema.columns;
   Terrasoft.each(columns, function(column) {
    if (column.dataValueType !== Terrasoft.DataValueType.GUID &&
     column.dataValueType !== Terrasoft.DataValueType.TIME &&
     column.dataValueType !== Terrasoft.DataValueType.BLOB &&
     column.dataValueType !== Terrasoft.DataValueType.IMAGELOOKUP &&
     column.usageType !== ConfigurationEnums.EntitySchemaColumnUsageType.None) {
     if (this.isColumnDeprecated(column)) {
      return;
     }
     columnNames.push({
      name: column.name,
      caption: column.caption
     });
    }
   }, this);
   var sortedColumnNames = columnNames.sort(function(a, b) {
    if (a.caption === b.caption) {
     return 0;
    } else {
     return a.caption > b.caption ? 1 : -1;
    }
   });
   Terrasoft.each(sortedColumnNames, function(item) {
    var column = columns[item.name];
    columnList[column.name] = {
     value: column.name,
     displayValue: column.caption,
     dataValueType: column.dataValueType,
     referenceSchemaName: column.referenceSchemaName
    };
   });
   list.loadAll(columnList);
  }

Модули действительно напрямую переопределять нельзя, но тут неоднократно обсуждали, как подменить нужную логику своей.

Показать все комментарии