我有两个功能; 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
列作为超链接?
答案 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