Как мне отфильтровать фильтры списка сеток EXT JS? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть сетка с фильтрами списка . Когда я фильтрую один столбец, остальные фильтры списка не фильтруются с результатами.

Я сделал тестовую скрипку , чтобы проиллюстрировать это:


Когда я фильтрую на роль руководителя проекта , у меня только один результат с активным статусом (Диана). Но когда я смотрю на фильтры состояния , я вижу оба (активный и приостановленный):
enter image description here

Есть ли способ, которым связаны только фильтры с результатами отображаются?

Примечание: я использую Ext JS 6.5.2.

1 Ответ

3 голосов
/ 02 марта 2020

Это можно сделать, переопределив метод getOptionsFromStore для фильтра списка без конкретного хранилища (с автоматическим созданием из хранилища сетки). Или вы можете создать новый компонент на его основе

скрипка

Ext.define('Ext.grid.filters.filter.DynamicList', {
    extend: 'Ext.grid.filters.filter.List',
    alias: 'grid.filter.d-list',
    type: 'd-list',
    getOptionsFromStore: function (store) {

        var me = this,
            data = store.getData(),
            map = {},
            ret = [],
            dataIndex = me.dataIndex,
            labelIndex = me.labelIndex,
            recData, idValue, labelValue;

        if (store.isFiltered() && !store.remoteFilter ) {
            data = data.getSource();
        }

        //each filtered records, not all
        Ext.Array.each(store.getRange(),function (record) {
            recData = record.data;

            idValue = recData[dataIndex];
            labelValue = recData[labelIndex];

            if (labelValue === undefined) {
                labelValue = idValue;
            }

            if (!map[idValue]) {
                map[idValue] = 1;
                ret.push([idValue, labelValue]);
            }
        }, null, {
            filtered: true,
            collapsed: true
        });

        return ret;
    }
});
...