Проблема вызова Flex Multi Service в For-Loop - PullRequest
0 голосов
/ 16 мая 2011

Новая версия:

Спасибо за ваш ответ. Извините, я начинаю снова:

импорт (. * Для тестирования):

mx.events.*
mx.soap.*
mx.rpc.*
mx.controlls.*

creationCompleteHandler () вызывается при запуске программы с creationComplete:

<?xml version="1.0" encoding="utf-8"?>
        <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
            creationComplete="creationCompleteHandler(event)">
             ..

В этой функции я запрашиваю данные из таблицы MySQL modul1. module1Service1.getAllModule1_where был автоматически создан из представления Flex Design. Это сервис для общения с PHP / MySQL. Эта функция работает отлично. Идентификатор 2735 в параметре жестко задан для тестирования. MySQL Table modul1 выглядит так:

ID_MODUL1(PK) NAME
1             Modulx
2             Moduly
3             Modulz
      protected function creationCompleteHandler(event:FlexEvent):void {
            getAllModule1_whereResult2.token = module1Service1.getAllModule1_where(2735);
            getAllModule1_whereResult2.addEventListener(ResultEvent.RESULT,waitForResult1);
        }

Когда результат готов, вызывается waitForResult1 (событие: ResultEvent). Теперь мне нужно сделать новый вызов MySQL. В этой функции я хочу перебрать строки результатов MySQL из таблицы modul1 и извлечь соответствующие данные из таблицы MySQL modul1_content, где modul1_content.id_modul (FK) = modul1.id_modul1 (PK). Переменная id_module1 в цикле устанавливается с правильным идентификатором. Таблица modul1_content выглядит так:

ID_MODUL1_CONTENT(PK) ID_MODUL1(FK) CONTENT
1                     1             text...
2                     1             text...
3                     3             text...
4                     2             text...
//get module2 from module1_id
        public function waitForResult1(event:ResultEvent):void {

            for(var i:int = 0; i < getAllModule1_whereResult2.lastResult.length; i++){

                id_module1 = getAllModule1_whereResult2.lastResult[i].id_modul1;

                c = new CallResponder(); 
                c.token = module2Service.getAllModule2_where( id_module1 );

                c.addEventListener(ResultEvent.RESULT,getListener2(i,getAllModule1_whereResult2.lastResult.length));        



            }   

        }

В каждой итерации вызывается getListener2 (). На последней итерации writeBook (module1, module2) вызывается. writeBook работает нормально, но отсутствует параметр module2. В каждой итерации я хочу добавить результат из MySQL в публичную переменную module2 [i]. я настроен. 0,1,2, но module2 [0] и module2 [1] пустые, module2 [2] верный. Существуют строки MySQL для i = 0 и i = 1.

        public function getListener2(i:Number, max:Number):Function {
            return function(e:ResultEvent):void{
                module2[i] = c.lastResult;
                Alert.show( c.lastResult + " " + i);
                //all data loaded, call writeBook
                if(i == max -1){
                    writeBook( module1, module2 );
                }

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