ExtJS - сеточный фильтр с несколькими столбцами и несколькими значениями - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю сетку и панель инструментов с двумя меню menuCheckItem.Когда я проверяю menuCheckItem сетка фильтрует даже с несколькими значениями и несколькими столбцами.Это работает нормально, так как я создал сетку 1-й, а затем панель инструментов

this.up('') // Used Instead of Ext.getCmp()

Working FIDDLE - https://fiddle.sencha.com/#view/editor&fiddle/2lop

Теперь я пытаюсь создать ту же панель инструментов вместе с меню отдельно в верхней 1-йа затем создайте сетку внизу.Но при этом работает только несколько значений.

Я пытаюсь отфильтровать сетку с несколькими значениями, а также с несколькими столбцами.

Несколько вещей, которые я пробовал -

// Only Filters One Value at a time with each Columns
store.queryBy(function(record,id){
 return (record.get('name') == someValue && record.get('phone') == otherValue);
});    

и

// Filters Many Columns with Single Value
filter.add(
     property : name, phone
     value : "somevalue"
     operator : "OR" 

);

Есть ли способ реализовать панель инструментов 1-й, а затем сетку?И фильтровать сетку с множеством значений и столбцов одновременно?

1 Ответ

0 голосов
/ 22 сентября 2018

В этом FIDDLE я переделал универсальную функцию (checkchange), которую можно поставить отдельно, и вы сможете прикрепить ее к каждому menucheckitemВы создаете.Единственное, что, если вы добавляете новый фильтр menucheckitem, вы должны назвать menucheckitem id с именем columnDataIndex-Menu и добавить это columnDataIndex в menuFilters, и это все.

checkchange: function (checkbox, checked, eOpts) {
    var menuFilters = ['name', 'phone'];
    var getChecked = function (m) {
        var checkedItems = [];
        m.items.items.forEach(function (c) {
            if (c.checked) {
                checkedItems.push(c.text);
            }
        });
        return checkedItems;
    };
    //
    var menus = new Map();
    menuFilters.forEach(function (e) {
        menus.set(e, Ext.getCmp(e + '-Menu'));
    });
    //
    var fieldValues = [];
    menuFilters.forEach(function (e) {
        fieldValues.push([e, getChecked(menus.get(e))]);
    });
    //
    var store = checkbox.up('grid').store;
    store.clearFilter();
    //
    if (fieldValues.length > 0) {
        store.filterBy(function (record) {
            var fV = this.fieldValues;
            for (var i = 0; i < fV.length; i++) {
                if (fV[i][1].length > 0) {
                    if (fV[i][1].indexOf(record.get(fV[i][0])) === -1) {
                        return false;
                    }
                }
            }
            return true;
        }, {
            fieldValues: fieldValues
        });
    }
}
...