我正在构建我的第一个flex应用程序,目前正忙于将其拆分为多个组件以使其可维护。 我有一个屏幕,其中包含在成功登录尝试后显示和填充的列表:
主要应用程序的一部分:
<mx:ViewStack id="vsAdmin" height="100%" width="100%">
<mx:TabNavigator id="adminTabs" width="100%" height="100%" historyManagementEnabled="false">
<myComp:compBeheerdersAdmin id="beheerdersViewstackA"/>
</mx:TabNavigator>
</mx:ViewStack>
在组件compBeheerdersAdmin中有一个函数requestBeheerdersList(),它从服务器获取数据并通过处理程序将其绑定到列表。
从主应用程序登录以下代码后:
mainViewstack.selectedChild = vsAdmin;
//beheerdersViewstackA.createComponentsFromDescriptors();
beheerdersViewstackA.requestBeheerdersList();
函数requestBeheerdersList()什么都不做(没有达到,我把一个警告作为函数中的第一个语句,但是没有显示)当我在刷新SWF后登录,但是当我退出并再次登录时,然后到达该功能并显示警报,并使用服务器中的数据填充列表。 有什么想法吗?
答案 0 :(得分:1)
在调用下一个函数之前,我会确保您调用的组件存在。这可以通过强制createPolicy = all来完成。您还可以为CreationComplete添加一个事件侦听器来调用所需的函数:
private function doThisFirst():void{
mainViewstack.selectedChild = vsAdmin;
vsAdmin.addEventListener(FlexEvent.CREATION_COMPLETE,doThis);
}
private function doThis():void{
beheerdersViewstackA.requestBeheerdersList();
}
这可能不完全正确,但我尝试重新创建您的具体示例。如果您熟悉其子级和事件监视器的视图堆栈创建,您应该能够满足您的特定需求。
答案 1 :(得分:0)
或者,您可以在mxml中使用creationComplete定义
<mx:Canvas ... creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
private function onCreationComplete():void {
requestBeheerdersList()
}
]]>
</mx:Script>
或可能
<mx:Canvas ... creationComplete="requestBeheerdersList()">
Flex的难点在于理解mxml组件如何映射等效的纯actionscript类。当您的mxml代码类似于&lt; local:Mycomponent id =“myComponent”&gt;时,这将添加为子类的实例。 mxml文件Mycomponent.mxml定义了该类。除非声明为static,否则&lt; mx:Script&gt;中列出的函数tag是应用于实例的函数。没有可以显式定义的构造函数,但实际创建之前实例不可用。因此,您必须依赖creationComplete来执行您从严格AS3类中的构造函数调用的任何函数。