Показать сообщение отдельно
  #6 (permalink)  
Старый 19.06.2019, 15:57
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Добрый день.
Pavel M. - Сделал по вашему примеру так:
....
{
                ....
                store: Ext.create('Ext.data.Store', {
                    fields: ['id', 'name', 'show'], // в show массив с id, которые показываем при выборе этого пункта
                    data: [
                        {id:1, name:"Пункт 1", show:[1, 2]},
                        {id:2, name:"Пункт 2", show:[1, 2, 3]},
                        {id:3, name:"Пункт 3", show:[2, 3, 4]},
                        {id:4, name:"Пункт 4", show:[3, 4, 5]},
                        {id:5, name:"Пункт 5", show:[4, 5, 6]},
                        {id:6, name:"Пункт 6", show:[5, 6]}       
                    ]
                }),   
                listeners: {
                    render: function (combo){
                        store = combo.getStore();
                        store.filter('id', 1);
                    },
                    select: function (combo, rec) {
                        store = combo.getStore();   
                        store.clearFilter(true);
                        store.filter({
                            property: 'id',
                            operator: 'in',
                            value: rec.get('show')
                        });
                    }
                }
            },
.....


Пример в fiddle
При создании новой записи работает как и требуется, но если редактируем имеющуюся,
то событие select срабатывает только когда выбран уже элемент, соответственно фильтрации по значениям 'show' не происходит.
По идее, если перенести фильтрацию в render, то можно добиться необходимого, но при этом мне обязательно нужно получать установленное значение комбы,
и вроде так должно работать, но как мне получать в render текущую запись?

listeners: {
                    render: function (combo){
                        currentRec.get('show')//currentRec - Должна быть установленная запись, но как мне ее получить в render ?
                        if(Ext.Object.isEmpty(currentRecShow)){
                            store = combo.getStore();
                            store.filter('id', 1);
                        }
                        else{
                            store = combo.getStore();   
                            store.clearFilter(true);
                            store.filter({
                                property: 'id',
                                operator: 'in',
                                value: currentRec.get('show')//rec.get('show')
                            });
                        }
                    },                   
                }

Возможно что мой вариант абсолютно не правильный. Тогда как сделать наиболее верное решение?
Ответить с цитированием