我正在使用flashbuilder 4.6并且正在进行一个简单的应用程序,该应用程序使用listcomponent从XML服务(外部URL)中提取数据,该服务在flashbuilder中设置了数据/服务功能。
现在我有一个相对简单的列表,只显示xml项目的“名称”:
<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
creationComplete="list1_creationCompleteHandler(event)" labelField="Itemname">
<s:AsyncListView list="{getDataResult.lastResult}"/>
</s:List>
...我有另一个xml节点/数据元素,它是一个完整的URL(http:// ... .jpg)到缩略图,我希望将该图像对齐到'左边' name'元素。
我尝试使用类似下面的东西,但没有运气。我在网上找到的信息并没有真正帮助理解itemrenderers(这是我认为我需要使用的)。
<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
creationComplete="list1_creationCompleteHandler(event)" labelField="Itemname">
<s:AsyncListView list="{getDataResult.lastResult}"/>
<mx:itemRenderer>
<mx:Component>
<mx:Label text="Itemname"/>
<mx:Image source="ItemImageURL"/>
</mx:Component>
</mx:itemRenderer>
</s:List>
有没有办法在没有itemrenderers的情况下这样做?或者这是唯一的出路?我的尝试是否完全接近在列表组件中实现缩略图的正确方法?感谢有人在这里提供的任何帮助。
答案 0 :(得分:1)
您提供的代码将Spark和MX Components混合在一起,我希望编译器出错。对于初学者,您有以下问题:
mx:itemRenderer
是用于在组件上定义属性的语法。因此,它用于定义s:List
组件上itemRender属性的值。这将导致编译器错误,因为命名空间不同。您应该指定s:itemRenderer
。mx:Component
用于定义新的内嵌组件。但是,您的命名空间是错误的。使用Flex 4.6,您应该指定fx名称空间,而不是mx名称空间。 mx:Component
标签的子组件,其中它们应该只有1. MX世界中的解决方案是将标签和图像包装在容器中。在Spark世界中,itemRenderer必须扩展ItemRenderer类。你有正确的想法;但执行错误。请阅读creating itemRenderers上的此信息。
我会像这样修改你的代码:
<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
creationComplete="list1_creationCompleteHandler(event)" >
<s:AsyncListView list="{getDataResult.lastResult}"/>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer dataChange="onDataChange()">
<fx:Script>
<![CDATA[
protected function onDataChange():void{
labelDisplay.text =data.Itemname
imageDisplay.source = data.ItemImageURL
}
]]>
</fx:Script>
<s:HGroup>
<s:Label id="labelDisplay" />
<s:Image id="imageDisplay" />
</s:HGroup>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
这是我编写浏览器的未经测试的代码;但它应该证明正确的方法。命名空间是正确的。有一个组件定义为itemRenderer,它扩展了ItemRenderer类。 itemRenderer数据更改时,显示的项目应更新,例如在列表中滚动时。并且这两个项目的位置使它们不会相互显示。