直接访问组件中的功能

时间:2008-10-13 14:35:02

标签: flex

我正在构建我的第一个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后登录,但是当我退出并再次登录时,然后到达该功能并显示警报,并使用服务器中的数据填充列表。 有什么想法吗?

2 个答案:

答案 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类中的构造函数调用的任何函数。