DataGrid使用URLLoader中的XML数据

时间:2013-04-29 22:13:08

标签: xml actionscript-3 xml-parsing flash-cs5

我有两个功能; submitIngredientChoices,将变量传递到查询字符串中,以这种格式传递给名为Recipe Puppy的网站:/?i=chicken,lamb,pesto&q=italian&format=xml。该网站有一个开放的API并返回一个XML文档。

我的第二个函数recipeResults()实例化一个DataGrid,其dataProvider设置为URLLoader数据(loader.data)。数据被加载到DataGrid中,但它看起来不是很好,并将一些列显示为文本,我希望它们是超链接。

function submitIngredientChoices(event:MouseEvent):void {

    var url : String = 'http://www.recipepuppy.com/api/';
    // url variables all which will appear after ? sign
    var urlVariables : URLVariables = new URLVariables ();
    var ingredients:Array = [so.data.meat1, so.data.meat2, so.data.meat3,
                             so.data.veg1, so.data.veg2, so.data.veg3,
                             so.data.carbs1, so.data.carbs2, so.data.carbs3];

    var others:Array = [so.data.other1, so.data.other2, so.data.other3,
                        so.data.cuisine1, so.data.cuisine2, so.data.cuisine3,
                        so.data.mealtype1, so.data.mealtype2, so.data.mealtype3];

    urlVariables['i'] = ingredients.join();
    urlVariables['q'] = others.join();
    urlVariables['format'] = "xml";

    // creating new URL Request
    var request:URLRequest = new URLRequest (url);
    // setting the variables it need to carry
    request.data = urlVariables;
    // setting method of delivering variables ( POST or GET )
    request.method = URLRequestMethod.GET;
    trace(request.data);
    // creating actual loader
    var loader:URLLoader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, recipeResults);
    loader.load(request);
}

我的datagrid函数:

function recipeResults(event:Event):void {
    addChild(_dataGrid);
    var xmlDP:XML = new XML(loader.data);
    // create a new data provider with this and register it with the DataGrid
    dp = new DataProvider(xmlDP);
    dataGrid.dataProvider = dp;
}

我知道拥有xmlParse函数可以解决这个问题,但是我的dataGrid如何在没有任何解析的情况下自动加载未解析的XML文档?

我还想知道如何通过下面的代码轻松更改列以及如何将xml数据的a href列作为超链接?

编辑:我对AS2比较熟悉,但我刚刚意识到AS3的一个主要新功能是自动XML解析(我认为这是对的吗?)无论如何,我的问题仍然存在,我该怎么办?更改datagrid的外观(即如何访问xml元素并将它们归因于datagrid中的列?)

1 个答案:

答案 0 :(得分:1)

您需要将datagrid上的columns属性设置为包含所需列的字符串名称的对象。

您可以在此处找到有关自定义DataGrid的更多信息(例如设置默认列宽):

http://help.adobe.com/en_US/as3/components/WS5b3ccc516d4fbf351e63e3d118a9c65b32-7f4a.html

或者,您可以使用E4X将XML解析为更适合您需求的格式。这是一个关于这样做的教程:

https://developer.mozilla.org/en-US/docs/E4X/Processing_XML_with_E4X