2012-04-12 29 views
1

複数のリモートオブジェクト呼び出しに問題があります。まず、私は雇用者IDをサーバーから取得する必要があります(BlazeDS btwを使用してください)。次に、雇用者IDごとに、各雇用者IDの要求を作成し、各雇用者(他の2つの遠隔オブジェクトが各雇用者IDを呼び出す)だからあなたが理解しているように、3番目のリモートオブジェクトコールは2番目のレスポンスをパラメータとして受け取り、2番目のレスポンスは1番目のレスポンスをパラメータとして受け取ります。複数のリモートオブジェクト呼び出しの呼び出し

私の問題は、最初のリクエストのレスポンスを反復すると、2番目のリモートオブジェクトはそれぞれの最後の要素に対してのみ呼び出されるということです。私はフレックスのスレッドが前の応答を返すまで待つことができますどのように

<fx:Declarations> 
    <parsley:FastInject property="karBUS" type="{KarBUS}"/> 
     <s:CallResponder id="hastalariGetirResponder" result="hastalariGetirResponder_resultHandler(event)"/> 
     <s:CallResponder id="yatakOdaGetirResponder" result="yatakOdaGetirResponder_resultHandler(event)" fault="yatakOdaGetirResponder_faultHandler(event)"/> 
     <s:CallResponder id="hastaKartlariGetirResponder" result="hastaKartlariGetirResponder_resultHandler(event)"/> 
     <s:CallResponder id="hastaResimGetirResponder" result="hastaResimGetirResponder_resultHandler(event)"/> 
     <parsley:Configure /> 
    </fx:Declarations> 

<fx:Script> 
     <![CDATA[ 

[Inject(id="karBUS")] 
public var karBUS:KarBUS; 

      protected function view1_creationCompleteHandler(event:FlexEvent):void 
      { 


       trace("Hastalarim View: persID:"+SessionClientData.prsnl.personelId+",servisID: " + SessionClientData.servisId); 
       hastalariGetirResponder.token = karBUS.getHastalarim(SessionClientData.prsnl.personelId,SessionClientData.servisId); 

      } 

protected function hastalariGetirResponder_resultHandler(event:ResultEvent):void 
      { 
       hastalarim = hastalariGetirResponder.lastResult; 

       if(hastalarim.length == 0) { 
        this.addElement(txt_empty); 
        this.removeElement(busy_ind); 
       } 

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

        kt = hastalarim.getItemAt(i) as Object; 

        vizitID = kt[6]; 
        hastaTC = kt[3]; 

        yatakOdaGetirResponder.token = karBUS.getYatakOdaNo(vizitID); 
       } 

      } 


protected function yatakOdaGetirResponder_resultHandler(event:ResultEvent):void 
      { 
       yatakOda = yatakOdaGetirResponder.lastResult as Object; 

       hastaKartlariGetirResponder.token = karBUS.getHastaKarti(vizitID); 

      } 

      protected function hastaKartlariGetirResponder_resultHandler(event:ResultEvent):void 
      { 
       hastaTuru = hastaKartlariGetirResponder.lastResult as String; 

       hastaResimGetirResponder.token = karBUS.getHastaResim(hastaTC); 
      } 

      protected function hastaResimGetirResponder_resultHandler(event:ResultEvent):void 
      { 
       resim = hastaResimGetirResponder.lastResult as ByteArray; 


       dp=new ArrayCollection(); 

       var yatak:String; 
       var oda:String; 
       var kat:String; 

       if(yatakOda == null){ 
        yatak = ""; 
        oda = ""; 
        kat = ""; 
       }else{ 
        yatak = yatakOda[2]; 
        oda = yatakOda[1]; 
        kat = yatakOda[0]; 
       } 

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

        kt = hastalarim.getItemAt(i) as Object; 

        var dt:Date = kt[5] as Date; 
        var vizitT:String = dt.date + "-" + (dt.month+1) + "-" + dt.fullYear; 

        dp.addItem({hastaId:kt[0], adi:kt[1],soyadi:kt[2],tcKimlikNo:kt[3], resim: resim, 
         yasi:kt[4],katNo:kat,odaNo:oda,yatakNo:yatak, 
         vizitTarihi:vizitT,vizitId:kt[6],cinsiyeti:kt[7], hastaTuru:hastaTuru}); 


        trace("OdaNO - Yatak NO: "+ oda + ", " + yatak); 

       } 






      } 



    ]]> 
    </fx:Script> 

は、ここに私のビューのコードですか?任意のスレッドの処理方法?

答えて

3

私はこの問題は、あなたが毎回

for(var i:int=0;i<hastalarim.length;i++){ 
    ...  
    yatakOdaGetirResponder.token = karBUS2.getYatakOdaNo(vizitID); 
} 

ので、最後の要求に対する応答が処理されたトークンを上書きしていることだと思います。

スタティックレスポンダyatakOdaGetirResponderは使用しないでください。リクエストごとに新しい​​オブジェクトを作成してください。

for(var i:int=0;i<hastalarim.length;i++){ 
    ...  
    var responder: CallResponder = new CallResponder(); 
    responder.addEventListener(ResultEvent.RESULT, yatakOdaGetirResponder_resultHandler); 
    responder.token = karBUS2.getYatakOdaNo(vizitID); 
} 
+0

はい私はこれについて考えました。各コールレスポンダに新しいトークンを作成する方法はありますか?または、繰り返しのたびに別のコール応答者を作成する必要がありますか? –

+0

はい、私は何もしませんでした何かをする場合は、代替...私はすべての静的呼び出し応答者を動的なものに変換するつもりです。しかし、それは良いディテールでした&あなたにスプラッシュありがとう! –

+0

もう1つの質問ですが、リストに挿入するために4つのリモートオブジェクト呼び出しがすべて完了したことを知る方法はありますか?私はFlexのリモートオブジェクト呼び出しが「キュー」方式で動作することを理解していました。新しい呼び出しをすべてキューに入れ、後で私が書き込んだresult-handlerが完了したら、すべて呼び出します。すべてのリクエストが完了したか、それとも何かがある場合 –

関連する問題