2011-06-27 61 views
0

所以我一直在試圖從XML文件加載數據到數據網格中。該項目在Cairngorm框架中。 XML文件位於Web內容文件夾中。我在Services文件夾中有一個HTTPService調用。在Flex中使用HTTPService加載XML文件

<mx:HTTPService 
     id = "getCategory" 
     url = "assets/CategoryDept21Class1.xml" 
     resultFormat = "e4x" 
     /> 

當我在一個dataGrid中進行選擇時,它應該用XML文件中的數據填充另一個dataGrid。以下是類數據網格。當我點擊一個類時,它應該填充下一個數據網格。

<mx:DataGrid rowCount="10" enabled="true" 
     dataProvider="{classList}" 
     verticalScrollPolicy="on" 
     click = "onClass()" 
     id="classes" width="192" top="73" left="253" height="225"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="#" dataField="merchandiseClassNumber" width="50"/> 
      <mx:DataGridColumn headerText="Class Name" dataField="merchandiseClassDescription" width="150"/> 
     </mx:columns> 
    </mx:DataGrid> 

這些是將被觸發的方法。

private function selectClass(evt:ResultEvent):void{ 
       //this.categoryList = new XMLListCollection(evt.result.resultSet); 
       this.categoryList= evt.result.resultSet.MerchandiseAssortmentCategory; 
       var request:AMTCategoryEvent; 
       CairngormEventDispatcher.getInstance().dispatchEvent(request); 

      } 

      private function onClass():void{ 
       //Alert.show("you just clicked on a class "); 
       var event:AMTCategoryEvent = new AMTCategoryEvent(); 
       CairngormEventDispatcher.getInstance().dispatchEvent(event); 
      } 

這就是我在我的委託

public function getCategory() : void 
     { 
      service = ServiceLocator.getInstance().getHTTPService("getCategory") as HTTPService; 
      //Alert.show(service.url); 
      var token : AsyncToken = service.send(); 
      token.addResponder(responder); 
     } 

定義的getCategory(),這就是我在我的getCategoryCommand。

public function execute(event: CairngormEvent) : void{ 
      var categoryEvent: AMTCategoryEvent = event as AMTCategoryEvent; 
      var deleg:Delegate = new Delegate(this); 
      deleg.getCategory(); 
      //deleg.getCategory(categoryEvent.deptNumber, categoryEvent.classNum); 
     } 

     public function result(info:Object) :void{ 
      trace("Get Category: Success"); 
     // __model.categoryList = new XMLList(info.result.resultSet.MerchandiseAssortmentCategory); 
      var xmlbleh:XMLList=info.result.resultSet.MerchandiseAssortmentCategory.lastResult; 
      mx.controls.Alert.show(xmlbleh.toXMLString()); 
      __model.categoryList = new XMLListCollection(XMLList(info.result.resultSet.MerchandiseAssortmentCategory.lastResult)); 

    } 

由於某種原因,它不會將xml文件中的數據讀入數據網格。如果我的問題很清楚,這是我在這個網站上的第一個問題,我不知道。但我該怎麼做?謝謝:)

+0

我看不到你在任何地方給你的數據提供者(classList)賦值。或者我錯過了它? –

回答

1

這個問題很清楚,但你可能有額外的信息可能是有用的。我將嘗試通過一系列問題來闡明這些問題。 (這可能屬於評論,但有大小限制,它可能會變得很笨重)

1-我希望你能夠在你的委託中獲得HttpService的引用。

2-我希望您能夠設法進行調試,直到完成異步服務調用。

3-我假設從不調用結果回調函數。 (或者對此有錯)。

4-我假設應用程序部署在Web服務器中。

如果我所有的假設都是正確的,那麼問題可能出在url的形成上。我假設你正在嘗試提供一個相對路徑,但我會嘗試提供絕對路徑。如果問題出在url上,那麼這個服務調用應該已經記錄在你的背後,你應該看到一個錯誤消息,如404)。

如果沒有明顯的錯誤消息,那麼這可能是一個安全錯誤。你提供了跨域策略文件嗎?

如果我的任何假設是錯誤的,請填寫必要的信息。另請提供Flex SDK版本。

注意:如果您將其作爲獨立應用程序運行,則存在一個安全約束,不允許您從文件系統讀取數據,除非您在Flash Builder中提供了其他屬性。

+0

擺脫結果()中的roottag - resultSet工作!雖然謝謝! –