使用Flex 4处理深度

我有这样的Flex 4代码
<!-- START >>> middle part: items -->
<mx:Canvas id="itemContainer"
           width="100%"
           height="100%">
    <!-- START >>> Items Display on the page -->
    <mx:Repeater id="richTextReapeater" 
                 dataProvider="{_model.current_day.richTextNotes}">
        <components:RichTextNoteDisplay theNote="{richTextReapeater.currentItem}" />    
    </mx:Repeater>
    <mx:Repeater id="postItReapeater" 
                 dataProvider="{_model.current_day.positNotes}">
            <components:PostItNoteDisplay theNote="{postItReapeater.currentItem}"  />   
    </mx:Repeater>
    ......
</mx:Canvas>
主要是它是一个MX:Canvas,里面有我创建的多个自定义组件的reapeater。大多数这些自定义组件都是这样的:
   <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx"
                          x="{theNote.x}"
                          y="{theNote.y}"
                          width="{theNote.width}"
                          height="{theNote.height}"
                          depth="{theNote.depth}"
                          rotation="{theNote.rotation}"
creationComplete="skinnablecontainer1_creationCompleteHandler(event)" >
除了深度,一切都很好(x,y,宽度,高度,旋转)! 似乎无论数字是什么,它都显示为在父容器中呈现的顺序。 (MX:帆布)! 我想要实现的是,相对于彼此,mx:Canvas中的所有项目都按照分配给它们的“深度”顺序显示。 我该怎么做呢?     
已邀请:
你正在使用转发器;这实际上是一个循环。 这听起来像是要求循环项目,但以不同的顺序处理这些项目。那是对的吗? 我的第一个建议是,您将研究在转发器“运行”之前按深度对dataProvider项目进行排序的方法。 我的第二个建议是你不使用转发器。基于列表的类将为渲染器回收提供更好的性能。 如果你真的需要一次创建所有孩子,我的第三个建议就是你转到一个ActionScript实现,这个实现可以让你更精细地控制创建事物的方式和时间。 每次我使用转发器时,我一直不高兴。 以下是有关Flex 4的列表和itemRenderers的一些信息。 这是对我如何修改此示例以使用列表而不是转发器的粗略估计:
    <!-- START >>> middle part: items -->
    <mx:Canvas id="itemContainer"
               width="100%"
               height="100%">
        <!-- START >>> Items Display on the page -->
        <s:List id="richTextList" 
                     dataProvider="{_model.current_day.richTextNotes}"
                     itemRenderer="com.something.myComponent">
        </s:List>
    </mx:Canvas>
itemRenderer可能是这样的:
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark">
    <s:SkinnableContainer rotation="{data.rotation}"
    creationComplete="skinnablecontainer1_creationCompleteHandler(event)" />
</s:ItemRenderer>
该列表将确定渲染器的宽度,x和y位置。在大多数情况下,它也将决定高度;虽然Flex 3 List有一个variableRowHeight选项。 如果要使用基于ata的不同渲染器,请查看使用itemRendererFunction     

要回复问题请先登录注册