Связанные комбобоксы
        У меня в компоненте несколько городов и районы в них. В таблице районов есть поле city с id города, а в extjs в BaseParam указан id в параметре city по которому процессор фильтрует только те районы, кот. есть в данном городе. И вот я в городах слушаю событие выбора города и меняю параметр city. Проблема в обновлении комбобокса района автоматически, от выбора города. Т.е. если я выбрал город и в ручную удалил выбранный район — все как надо, выпадает нужный список районов. Но ведь это поле человек может и не трогать, оно должно автоматом обновляться. Так вот, я для этого использую getStore().load(), потом дергаю getStore().data.items и сравниваю что там есть со значением в районе (zone.value). Если getStore().data.items — пусто или там нету объекта с id из zone.value (т.е. по запросу с указанным городом пришли районы, но в них нет того, что сейчас выбран в комбобоксе), то очищаю значение в комбобоксе района. А там уж пользователь нужный ставит. Так вот, я выбираю в комбобоксе город А и затем город Б, срабатывает событие, но в zone.getStore().data.items всегда приходит результат, будто в city id того города, который я выбирал до этого (т.е. город А).
    
    
                                                                                
            listeners: {
    beforeselect: function( combo, record, index ){
        var zone = Ext.getCmp(config.id + '-zone'); // получаю районы
        zone.getStore().setBaseParam('city', record.id);
        console.log(record.id)
        //zone.getStore().reload();             //  и запрос отправляется таким, будто небыло setBaseParam('city', record.id), а city в BaseParam районов всегда одно и то же!
        /* //c.getStore().removeAll(); // пробую разное, чтобы получать свежий результат
         zone.lastQuery = null;
         zone.clearValue();
         zone.totalLength = 0;*/
        //zone.getStore().reload();	     // reload работает один раз и потом возвращает тот же результат
        zone.getStore().load();			// вместо reload используем load
        console.log(zone.getStore().data.items) // и тут всегда результаты прошлого запроса,  city в BaseParam, которые были в прошлом beforeselect
        var i = zone.getStore().data.items      // т.е. я выбираю город А, выбираю город Б, а в консоле видно, что запрос уходит с id города А в city
        // дальше предполагалось как-то так. 
        console.log(i)
        if(
            i.length == 0 ||
            !i.some(function(item){return item.id === zone.value;}) // просматриваем, что пришло в хранилеще после релоида запроса с измененным city  и проверяем, есть там объект с id, которое сейчас в инпуте
            ){
            zone.clearValue();
        }
    },
    scope:this
}В общем как-то очищать надо от прошлых запросов или еще что-то делать, чтобы в zone.getStore().data.items были актуальные данные?    Комментарии: 4
                не делай reload() — делай load()            
                    
                Так я так и делаю, релоэд закомментирован. 
Делаю
 
                    Делаю
zone.getStore().load();	
var i = zone.getStore().data.itemsи в i всегда значение от прошлого запроса.            
                так у тебя beforeselect — может оттого?            
                    
                Но это же в комбобоксе города. Там record.id правильный приходил, того города, который выбрал. Я от него и плясал в событии.
Так что по моёной логике не должно зависить.
Так что по моей логике не должно влиять. И главное в консоли та же фигня, там вообще не на событие все срабатывает, а на кнопку выполнить и цифру я вручную вводил…
Тем не менее, поменял на change, record.id заменил на newValue, остальное один в один — заработало. Спасибо.
Но все-таки хотелось бы, чтобы менялось сразу как человек выбрал, а не когда поменял фокус с инпута комбобокса города. И если бы выбранный район после смены города не пропадал — вапче было бы афигенно. Новерн можно его куда-то прятать, хоть в конфиг родительский, и если сново выбран город с этим районом -то возвращать.
                    Так что по моёной логике не должно зависить.
var zone = Ext.getCmp(config.id + '-zone'); // получаю районы
zone.getStore().setBaseParam('city', record.id);и дальше понеслось… Т.е. как бы мне главное выбранный id получить, а он приходит и в консоль.лог виден правильный.Так что по моей логике не должно влиять. И главное в консоли та же фигня, там вообще не на событие все срабатывает, а на кнопку выполнить и цифру я вручную вводил…
Тем не менее, поменял на change, record.id заменил на newValue, остальное один в один — заработало. Спасибо.
Но все-таки хотелось бы, чтобы менялось сразу как человек выбрал, а не когда поменял фокус с инпута комбобокса города. И если бы выбранный район после смены города не пропадал — вапче было бы афигенно. Новерн можно его куда-то прятать, хоть в конфиг родительский, и если сново выбран город с этим районом -то возвращать.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.