Как применять кастомные фильтры для дэша из коробки?
Как я понимаю, это возможно только через АПИ (через bixel нельзя).
Здравствуйте. Можно и через bixel)
Есть Observable сервис, singleton инстанс которого хранится в глобальной переменной __koobFiltersService. Обратиться к нему через шаблон на bixel.js можно так (помня, что глобальные переменные к iframe хранятся в window.parent):
koobId = config.dataSource.koob;
koobDimensions = config.dataSource.dimensions;
koobFilters = config.dataSource.koobInfo.filters;
koobFiltersService = window.parent.__koobFiltersService;
koobFiltersService.subscribeUpdatesAndNotify((model) => {
reload(model)
});
Где reload - это некая вами описанная функция, которая делает то, что вам нужно при установке новых фильтров.
Важно так же проверять, что значение model.loading == false (то есть модель загрузилась) и что model.error != “” (ошибки нет).
Метод subscribeUpdatesAndNotify будет вызываться каждый раз , когда сервис обновит свою модель из любого источника. Это значит, что функция (назовем ее как и раньше reload), которую вы назначили как колбек будет вызываться при установке фильтров при любом случае, даже игнорируя события load и no-data дешлета. Так что не забывайте обновлять соотвествующие таргеты или контексты canvas, если вы его используете, чтобы деш автоматически строил картинку, не зависимо ни от чего.
Есть вариант из коробки, в конфиге Деша в dataSource прописать отслеживаемые фильтры.
{ url: 'res:ВАШ_ФАЙЛ.html', dataSource: { filters: { МОЙ_DIMENSION: true, МОЙ_DIMENSION2: true, }, }, view_class: 'external', }
И далее в вашем файле html вызвать ф-ию bixel :
bixel.on('load', (data, axes) => {});
При каждом изменении отслеживаемого фильтра, будет вызываться эта функция. с новыми данными