0

我有两个功能;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);
}

我的数据网格功能:

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 文档而不发生任何解析的呢?

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

编辑:我对 AS2 更熟悉,但我刚刚意识到 AS3 的主要新功能之一是自动 XML 解析(我认为这是正确的,不是吗?)无论如何我的问题仍然存在,我该如何改变外观和数据网格的感觉(即我如何访问 xml 元素并将它们归因于数据网格中的列?)

4

1 回答 1

1

您需要将数据网格上的 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

于 2013-04-30T10:32:03.850 回答