ExtJS - второе поле со списком не заполняется после выбора первого - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть два зависимых поля со списком, и значение второго заполняется после выбора некоторого значения в первом.

Для этого я использую setValue для второго поля со списком в событии select первого.

Ниже приведены два случая кода, здесь случай 1 не работает, но случай 2 работает в IE9:

Case1: This doesn't work

    select:function(combo, record){
        Ext.getCmp('voyageMonitoritngVesselCode').store.load();//Loading the store of second combobox
        Ext.getCmp('voyageMonitoritngVesselCode').setValue(record[0].data.vslCd);//Setting the value in the second combo-box
    }


Case2: This works

    select:function(combo, record){
        Ext.getCmp('voyageMonitoritngVesselCode').store.load();//Loading the store of second combobox
        alert(record[0].data.vslCd);//The only difference in both cases is this line
        Ext.getCmp('voyageMonitoritngVesselCode').setValue(record[0].data.vslCd);//Setting the value in the second combo-box
    }

То есть, когда я записываю статистику оповещения между загрузкой магазина и установкой значения, тогда значения отображаются во втором комбинированном окне, но если я опускаю это предупреждение, то в комбинированном окне значение не устанавливается.

Я чувствовал, что, возможно, хранилищу нужно время для загрузки, и это может быть связано с остановкой оповещения. Но в качестве решения этой проблемы я использовал autoload: true для второй комбинации, так что хранилище не нужно загружать, но все равно случай был тот же - значение не устанавливалось без предупреждения.

Может кто-нибудь, пожалуйста, пролить немного света на это.

Браузер - IE9

ExtJS - 4

Заранее спасибо.

1 Ответ

0 голосов
/ 02 сентября 2011

Второй не работает, потому что загрузка - это асинхронный запрос, означающий, что хранилище еще не загружено, когда вы пытаетесь установить значение, устанавливая предупреждение, прежде чем оно даст ему достаточно времени для его загрузки ... быстрое исправление быть:

var combo = Ext.getCmp('voyageMonitoritngVesselCode');
combo.store.load({
                callback:function(r, options, success) {
                    combo.setValue(record[0].data.vslCd);
                }
            });
...