0

我正在使用 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),我希望该图像与“名称”元素的左侧对齐.

我尝试使用类似下面的东西,但没有运气。我在网上找到的信息对理解 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,有什么方法可以做到这一点吗?还是那是唯一的出路?我的尝试是否完全接近在列表组件中实现缩略图的正确方法?感谢有人可以在这里提供的任何帮助。

4

1 回答 1

1

您提供的代码混合了 Spark 和 MX 组件,我预计会出现编译器错误。对于初学者,您有以下问题:

  • mx:itemRenderer是用于定义组件属性的语法。因此,它用于定义s:List组件上 itemRender 属性的值。这将导致编译器错误,因为命名空间不同。您应该指定s:itemRenderer
  • mx:Component用于定义新的嵌入式组件。但是,您的命名空间是错误的。在 Flex 4.6 中,您应该指定 fx 命名空间,而不是 mx 命名空间。
  • 有两个组件被列为mx:Component标签的子组件,它们应该只有 1。MX 世界中的解决方案是将标签和图像包装在一个容器中。在 Spark 世界中,itemRenderer 必须扩展ItemRenderer类。
  • 对于文本和源,您要指定字符串文字;不是数据元素中的变量。

你有正确的想法;但错误的执行。阅读有关创建 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 数据更改时,例如当您在列表中滚动时,显示的项目应更新。并且这两个项目的位置使它们不会显示在彼此之上。

于 2013-02-20T03:21:39.463 回答