0

所以我一直在尝试将数据从 XML 文件加载到数据网格中。该项目在 Cairngorm 框架中。XML 文件位于 Web 内容文件夹中。我在 Services 文件夹中有一个 HTTPService 调用。

<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);
            }

这就是我在委托中定义 getCategory() 的方式

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

这就是我的 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 文件中的数据读入数据网格。这是我在这个网站上的第一个问题,我不知道我的问题是否清楚。但我该怎么做呢?谢谢 :)

4

1 回答 1

1

这个问题很清楚,但您可能有额外的信息可能有用。我将尝试通过一系列问题来阐明这些。(这可能属于评论,但那里有大小限制,可能会变得很麻烦)

1-我希望您设法在您的委托中获得 HttpService 的引用。

2-我希望您能够调试到异步服务调用完成为止。

3-我假设结果回调函数永远不会被调用。(或就此而言的错误)。

4- 我假设应用程序部署在 Web 服务器中。

如果我所有的假设都是正确的,那么问题可能出在 url 的形成上。我假设您正在尝试提供相对路径,但我将尝试提供绝对 url。如果问题出在 URL 上,那么服务调用应该已经记录在您的后台,并且您应该会看到类似 404 的错误消息)。

如果没有明显的错误消息,那么这可能是一个安全错误。您是否提供了跨域策略文件。

如果我的任何假设是错误的,请填写必要的信息。另请提供 Flex SDK 版本。

注意:如果您将其作为独立应用程序运行,则存在不允许您从文件系统读取的安全约束,除非您在 Flash Builder 中提供其他属性。

于 2011-06-27T20:23:09.140 回答