Flex帮助:在Accordion控件中不重复的中继器

时间:2008-11-22 17:08:23

标签: flex actionscript-3

我遇到手风琴控制中数据绑定儿童中继器的问题,希望你能帮忙......

我在ViewStack中有一个手风琴(其中,ViewStack也在另一个顶级ViewStack中)。我在手风琴控制的每个孩子都有一个中继器。该组件看起来像这样:


<mx:Box 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="init()"
>
<mx:ViewStack>
...
<mx:Accordion creationComplete="accordianInit()">
    <mx:Box label="Groups" width="100%">
        <mx:Repeater id="rpGroups" width="100%">
            <mx:CheckBox id="chkGroups" 
                label="{rpGroups.currentItem.name}" />
        </mx:Repeater>
    </mx:Box>
    <mx:Box label="Contacts">
        <mx:Repeater id="rpContacts">
            <mx:CheckBox id="chkContacts" 
                label=quot;{rpContacts.currentItem.full_name}" />
        </mx:Repeater>
    </mx:Box>
</mx:Accordion>
...
</mx:ViewStack>

<mx:Box>

问题在于,如果我在 init 功能中绑定2个中继器,则两个中继器都不会显示任何数据。如果我在 accordianInit 函数中绑定转发器,那么只有第一个转发器(rpGroups)才能获得数据绑定...

我应该在哪里对转发器进行数据绑定,以便两个转发器都能正常重复?

希望这是有道理的,如果不是我可以详细说明,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

将转发器的dataProvider绑定到MXML本身的源:

<mx:Repeater dataProvider="{the_data}" ... />

你看到自己的行为是因为Accordion(和ViewStack)并没有立即创建所有孩子。它只创建可见的子项(因此,第一个Box,最初是第一个ViewStack子项)。

由于这种行为,当您尝试在第一个init()事件处理程序中将数据分配给转发器时,转发器没有实例化的容器来重复子进程。当您在accordionInit()中将数据分配给转发器时,只创建了第一个Box,这就是为什么只有第一个转发器工作的原因。

如果您不想通过Repeater标记的dataProvider属性绑定到数据(如上所示),那么您可以使用Accordion上的更改处理程序在用户更改时设置转发器数据窗格(因为当用户点击窗格时,它们由Flex框架创建)。

所有这些都来自 creationPolicy 属性:http://livedocs.adobe.com/flex/3/html/layoutperformance_05.html