我在Flex中有一个有两个孩子的Accordion组件, 在我的页面加载时,我想通过使用actionscript将第一个子节点中的textfieldue给第二个子节点中的textfield,但是它的faild
nb:当我点击secode孩子并返回传递第一个孩子的textvalue时,动作成功了!
<mx:HBox width="100%" height="310" horizontalAlign="center">
<mx:Accordion id="accordion1" width="100%" height="310" historyManagementEnabled="true">
<!-- child 1--><mx:VBox id="theme_resultat" width="95%" height="95%"
label="Résultat" horizontalAlign="center"
verticalAlign="middle">
<s:HGroup left="0" right="0" bottom="0" width="98%"
horizontalAlign="right">
<s:TextInput id="doc"/>
<mx:Button id="btnAdd" label="Add"
click="add_text(event)"
icon="@Embed('assets/images/add.png')"
paddingLeft="3" paddingRight="3"/>
</s:HGroup>
</mx:VBox>
<!-- child 2--><mx:VBox id="theme_detail" width="95%" height="95%" label="Détail"
verticalAlign="middle">
<mx:VBox width="100%" height="150" horizontalAlign="center">
<s:HGroup>
<mx:FormItem label="Titre:" paddingLeft="5">
<mx:TextInput id="doc_titre"/>
</mx:FormItem>
</s:HGroup>
</mx:VBox>
</mx:VBox>
</mx:Accordion>
</mx:HBox>
protected function add_text(event:MouseEvent):void { accordion1.selectedIndex=1; doc_titre.text = doc.text; } }
当我点击添加时我移动到第二个孩子,但是(mx:TextInput id =“doc_titre”)没有值(s:TextInput id =“doc”/)
第二次我回到孩子1然后我点击添加,然后我移动到第二个孩子,我找到(s:TextInput id =“doc”)的值(mx:TextInput id =“doc_titre “)
答案 0 :(得分:1)
到底发生了什么?我认为你的问题可能是因为第二个子节点上的组件在打开视图之前没有创建,有很多解决方案,你可以在第二个视图的创建完成中编写一些代码来加载正确的值,您可以使用数据绑定将文本输入绑定到同一个字符串,或者您可以尝试将creationPolicy设置为all。 我的回答是基于我的上述假设,所以如果我错了,请提供更多细节。
检查此http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7cb8.html#WS2db454920e96a9e51e63e3d11c0bf69084-7ae5并尝试将creationPolicy设置为all,然后告知我们问题是否已解决
答案 1 :(得分:0)
改为使用createDefferedContent():
for (var i:int = 0; i < accordion.numChildren; i++)
{
(accordion.getElementAt(i) as NavigatorContent).createDeferredContent();
}
此方法在后台创建子项及其组件。不要像我一样使用creationPolicy,因为这会导致与内存相关的问题。