Проблемы с асинхронными методами - PullRequest
0 голосов
/ 19 января 2011

Я работаю с Flex 4, вызывая веб-сервисы из JVM 1.6

Я пытаюсь делать асинхронные вызовы Java, чтобы заполнить три комбинированных списка, которые будут отображать страну, штаты и города, эти три связаны (master-slave), но иногда вызовы не выполняются, или они не завершены, и я думаю, что это потому, что они асинхронные, как я могу быть уверен, что я делаю вызов для заполнения следующего выпадающего списка, когда основной выпадающий список (страна) заполнена?

защищенная функция comboCountry_changeHandler (idCombo: String): void {

            selectedComboCountry= idCombo;
            var countryId:String; 
            if(selectedComboCountry == comboCountry.id){
                countryId = String(comboCountry.selectedItem.countryId);                
            }else if(selectedCombocountry == combocountrySuc.id){
                countryId = String(comboCountrySuc.selectedItem.countryId);
            }



            obtainStatesResult.token = wsfacturas.obtainStates(countryId);


        }

защищенная функция receiveStatesResult_resultHandler (событие: ResultEvent): void {var StateListVo: ArrayCollection = receiveStokenRult..result as ArrayCollection;

            if(selectedComboCountry == "comboCountrySuc"){

                StateListsSuc.removeAll();
                CityListsSuc.removeAll();
                for (var d:int = 0; d < StateListVo.length; d++){
                    var estSuc:State = StateListVo[d];
                    StateListsSuc.addItem(estSuc);                                          
                }       

                comboStateSuc.dataProvider = StateListsSuc;
            }
            else if(selectedCombocountry == "combocountry"){
                StateListsEmp.removeAll();
                CityListsEmp.removeAll();
                for (var i:int = 0; i < StateListVo.length; i++){
                    var estEmp:State = StateListVo[i];
                    StateListsEmp.addItem(estEmp);      
                }                   
                comboState.dataProvider = StateListsEmp;
            } else {

                for (var f:int = 0; f < StateListVo.length; f++){
                    var est:State = StateListVo[f];
                    StateListsSuc.addItem(est); 
                    StateListsEmp.addItem(est); 
                }                           
                comboState.dataProvider = StateListsEmp;
                comboStateSuc.dataProvider = StateListsSuc;

            }
        } 

Ответы [ 2 ]

1 голос
/ 19 января 2011

Не означает ли это, что вам, вероятно, нужно загрузить страну и дождаться события изменения в поле со списком стран, чтобы обновить состояние и так далее? Если вы это сделаете, вам не придется беспокоиться об асинхронности ваших запросов? В противном случае вы могли бы использовать DataProviders, и они могли бы предоставить Event: Complete .. Я не уверен, хотя, я определенно не эксперт ..:)

0 голосов
/ 19 января 2011

Возможно, вы захотите дать немного больше деталей в вашем вопросе. Но я просто играю с любыми деталями, которые вы предоставили.

1_ Первые асинхронные вызовы никогда не вызывали проблем с динамическим связыванием данных. Иногда вызов SOAP может занять разумное количество времени, в этом случае убедитесь, что курсор занята, пока вызов веб-службы не вернется.

2_Combobox всегда имел проблемы с динамическим связыванием данных. Вы можете создать пользовательский комбинированный список, который расширяет комбинированный список и переопределяет метод setValue. Или же вам нужно перебрать dataProvider комбинированного списка и найти совпадение в поле данных, а затем установить поле со списком для этого элемента.

Итак, в целом, проблема в основном связана с привязкой новых данных к отображаемому списку, а не с асинхронными вызовами или задержкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...