我遇到手风琴控制中数据绑定儿童中继器的问题,希望你能帮忙......
我在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)才能获得数据绑定...
我应该在哪里对转发器进行数据绑定,以便两个转发器都能正常重复?
希望这是有道理的,如果不是我可以详细说明,任何帮助都会受到赞赏。
答案 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