2011-06-27 21 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工作!虽然谢谢! –