Flash构建器列表组件 - 如何添加图像URL

时间:2013-02-20 02:29:26

标签: actionscript-3 flex flexbuilder

我正在使用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的情况下这样做?或者这是唯一的出路?我的尝试是否完全接近在列表组件中实现缩略图的正确方法?感谢有人在这里提供的任何帮助。

1 个答案:

答案 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数据更改时,显示的项目应更新,例如在列表中滚动时。并且这两个项目的位置使它们不会相互显示。