我已获得最新的Adobe Flash Builder 4测试版。
我想使用<s:List>
组件,并将dataProvider
指定为XML文件。
然而,经过大量的研究(包括查看labs.adobe.com上的doc链接),我仍然无法弄清楚如何去做。
XML文件看起来像这样:
<?xml version="1.0" encoding="ISO-8859-1"?>
<imageList>
<image location="path/to/file1.jpg" />
<image location="path/to/file2.jpg" />
<image location="path/to/file3.jpg" />
</imageList>
答案 0 :(得分:2)
如果要在列表中显示图像,则应使用URLLoader加载xml,将其存储在可绑定变量中,并将其作为数据提供者分配给列表。该列表应使用mx:itemrenderer,您可以根据需要自定义视图。
实际代码就像这样
<fx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.collections.IList;
import mx.controls.Image;
private var loader : URLLoader = new URLLoader();
[Bindable]
private var xml : XMLList;
private function init() : void
{
this.loader.addEventListener(Event.COMPLETE, onComplete);
this.loader.load(new URLRequest("data.xml"));
}
private function onComplete(evt : Event) :void
{
this.loader.removeEventListener(Event.COMPLETE, onComplete);
this.xml = new XML(this.loader.data).image;
}
]]>
</fx:Script>
<mx:List id="list" width="200" height="500" dataProvider="{xml}">
<mx:itemRenderer>
<fx:Component>
<mx:Image width="200" height="200" source="{data.@location}" />
</fx:Component>
</mx:itemRenderer>
</mx:List>
答案 1 :(得分:2)
如果要通过网络加载XML文件,可以执行以下操作:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo">
<fx:Declarations>
<mx:HTTPService id="srv" url="http://ws.jamesward.com/images.xml"/>
</fx:Declarations>
<s:applicationComplete>
srv.send();
</s:applicationComplete>
<s:List dataProvider="{srv.lastResult.images.image}" width="100%" height="100%">
<s:itemRenderer>
<fx:Component>
<mx:Image source="{data.source}"/>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:Application>
答案 2 :(得分:0)
您需要使用XMLListCollection类。
<s:List dataProvider="{new XMLListCollection(data.image)}" labelField="@location"/>
答案 3 :(得分:0)
我最初的目标是在SWF外部有一个XML文件,我的客户可以自己维护,因此他们可以控制显示的图像。
我发布的第一个答案并不是我所追求的解决方案:使用fx:XML
意味着XML文件的内容实际上已编译到SWF中,因此在编译后无法更改。
所以我实施了詹姆斯的解决方案。
XML文件如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<images>
<image source="path/to/image1.jpg" />
<image source="path/to/image2.jpg" />
<image source="path/to/image3.jpg" />
<image source="path/to/image4.jpg" />
</images>
MXML:
<?xml version="1.0" encoding="utf-8"?>
<s:Group
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function lstImages_creationCompleteHandler(event : FlexEvent) : void
{
dpHttpService.send();
}
]]>
</fx:Script>
<fx:Declarations>
<mx:HTTPService
id="dpHttpService"
url="images.xml"
/>
</fx:Declarations>
<s:List
id="lstImages"
dataProvider="{dpHttpService.lastResult.images.image}"
width="100%"
itemRenderer="path.to.render.ImageRenderer"
skinClass="path.to.skins.ListSkin"
>
<s:layout>
<s:HorizontalLayout gap="2" />
</s:layout>
</s:List>
</s:Group>
在图像渲染器中,我引用了这样的数据:
<mx:Image
id="imgRendered"
source="{data.source}"
/>
这个解决方案真正有用的是,如果我愿意的话,我还可以对其他网站上存在的图像进行完整的http://
引用(当然,还记得crossdomain.xml
)。
实际上,images.xml文件可以存在于另一台服务器上。
答案 4 :(得分:-1)
好吧,我找到了一个解决方案。
MXML将如下所示:
<fx:Declarations>
<fx:XML
id="dpXml"
source="path/to/images.xml"
/>
<mx:XMLListCollection
id="dpXmlListCollection"
source="{dpXml.image}"
/>
</fx:Declarations>
<s:List
id="lstImages"
dataProvider="{dpXmlListCollection}"
itemRenderer="path.to.render.ImageRenderer"
skinClass="path.to.skins.ListSkin"
>
<s:layout>
<s:HorizontalLayout gap="2" />
</s:layout>
</s:List>
像这样的images.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<images>
<image>
<location>path/to/image1.jpg</location>
</image>
<image>
<location>path/to/image2.jpg</location>
</image>
<image>
<location>path/to/image3.jpg</location>
</image>
</images>
非常感谢您的所有回复!
马特