2012-12-05 56 views
1

我試圖從我的httpservice(在AS類中定義)返回我的mxml應用程序的結果。代碼本身工作正常,當我把所有的主要mxml,但我似乎無法得到它從我的AS類工作。從動作腳本中查詢httpservice類

當我在取得httpresult(myWatchedList = new XMLListCollection(myData.movi​​e);)的行上放置一個斷點時,我可以確認myWatchedList具有所需的值。但是,當我調用getWatchedList()方法時,myWatchedList始終爲空。

我敢肯定,我在這裏的東西很明顯...

我的AS類:

package components 
{ 

import mx.collections.XMLListCollection; 
import mx.rpc.events.ResultEvent; 
import mx.rpc.http.HTTPService; 

public class WatchList 
{ 
    [Bindable] 
    public var myToWatchList:XMLListCollection; 
    public var myWatchedList:XMLListCollection; 

    public function WatchList() 
    { 
     //httpservice for watched movies 
     var watchedList_service:HTTPService = new HTTPService(); 
     watchedList_service.url= "http://*****/phpscripts/selectWatchedlist.php"; 
     watchedList_service.showBusyCursor=true; 
     watchedList_service.resultFormat="e4x"; 
     watchedList_service.method="POST"; 

     //httpservice for not yet watched movies 
     var toWatchList_service:HTTPService = new HTTPService(); 
     toWatchList_service.url= "http://*****/phpscripts/selectToWatchlist.php"; 
     toWatchList_service.showBusyCursor=true; 
     toWatchList_service.resultFormat="e4x"; 
     toWatchList_service.method="POST"; 

     //listen for result 
     watchedList_service.addEventListener(ResultEvent.RESULT, watchedList_result); 
     toWatchList_service.addEventListener(ResultEvent.RESULT, toWatchList_result); 

     //send request to httpservice 
     toWatchList_service.send(); 
     watchedList_service.send();  

    } 

    public function toWatchList_result(event:ResultEvent):void 
    { 
     //result is xml 
     var myData:XML = XML(event.result); 
     myWatchedList = new XMLListCollection(myData.movie); 
    } 

    public function watchedList_result(event:ResultEvent):void 
    { 
     var myData:XML = XML(event.result); 
     myToWatchList = new XMLListCollection(myData.movie); 
    } 

    public function getWatchedList():XMLListCollection { 
     return this.myWatchedList; 
    } 

    public function getToWatchList():XMLListCollection { 
     return this.myToWatchList; 
    } 
} 
} 

在MXML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
      xmlns:components="components.*" 
      initialize="doSend()"> 
<s:layout> 
    <s:VerticalLayout paddingBottom="20" paddingLeft="20" 
         paddingRight="20" paddingTop="20"/> 
</s:layout> 
<fx:Script> 
    <![CDATA[ 
     import components.WatchList; 
     import mx.collections.XMLListCollection; 

     [Bindable] 
     private var myToWatchList:XMLListCollection; 
     private var myWatchedList:XMLListCollection; 
     private var watchList:components.WatchList; 
     protected function doSend():void 
     { 
      watchList= new components.WatchList(); 
      //fetch the watchlists 
      myToWatchList = watchList.getToWatchList(); 
      myWatchedList = watchList.getWatchedList(); 

      //bind the watchlists to the tilelist 
      myToWatchList_tile.dataProvider = myToWatchList; 
      myWatchedList_tile.dataProvider = myWatchedList; 
     } 


    ]]> 

</fx:Script> 
<fx:Declarations> 
</fx:Declarations> 
<s:Panel id="panel" width="100%" height="100%" title="Watchlist"> 
    <s:layout> 
     <s:VerticalLayout paddingBottom="5" paddingLeft="20" 
          paddingRight="20" paddingTop="5"/> 
    </s:layout> 
    <s:Label width="20%" fontSize="17" fontWeight="bold" text="Your watched movies"/> 
    <mx:TileList id="myWatchedList_tile" height="360" borderVisible="false" 
       columnCount="6" columnWidth="200" 
       itemRenderer="components.TileListItemRenderer" rowCount="1" rowHeight="360"/> 
    <s:Label width="20%" fontSize="17" fontWeight="bold" text="Your to watch movies"/> 
    <mx:TileList id="myToWatchList_tile" height="360" borderVisible="false" 
       columnCount="6" columnWidth="200" 
       itemRenderer="components.TileListItemRenderer" rowCount="1" rowHeight="360" /> 

</s:Panel> 

回答

0

首先你打電話給你的構造函數:

watchList= new components.WatchList(); 

,然後直接調用的結果:

myToWatchList = watchList.getToWatchList(); 

...你應該等到請求完成,如:扔當結果是牽強的事件,使該等待處理程序爲事件

+1

Thx,這工作。我現在在watchedList_result(event:ResultEvent)中派發一個事件,並在我的mxml應用程序中監聽這個事件。 – Steven