Apache flex FLEX:当我调用自定义组件的方法时,它仍然是一个空对象

Apache flex FLEX:当我调用自定义组件的方法时,它仍然是一个空对象,apache-flex,Apache Flex,我已经在Flex中创建了一个自定义组件,并且使用actionscript从主应用程序创建了它。我依次调用它的“setName”方法来传递一个字符串 我得到以下运行时错误(仅当我使用setName方法时才会发生): 我想我得到它是因为我在组件完全创建之前从主应用程序调用newUser.setName方法 如何让actionscript“等待”直到创建组件以调用该方法?我应该在主应用程序中创建一个等待它的事件侦听器吗?如果可能的话,我宁愿避免 代码如下: 主应用程序 ... newUser = ne

我已经在Flex中创建了一个自定义组件,并且使用actionscript从主应用程序创建了它。我依次调用它的“setName”方法来传递一个字符串

我得到以下运行时错误(仅当我使用setName方法时才会发生):

我想我得到它是因为我在组件完全创建之前从主应用程序调用newUser.setName方法

如何让actionscript“等待”直到创建组件以调用该方法?我应该在主应用程序中创建一个等待它的事件侦听器吗?如果可能的话,我宁愿避免

代码如下:

主应用程序

...
newUser = new userComp();
//newUser.setName("name");
组成部分:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="200" >

<mx:Script>
    <![CDATA[


        public function setName(name:String):void {
            username.text = name;
        }

       public function setTags(Tags:String):void {

        }

    ]]>
    </mx:Script>

    <mx:HBox id="tagsPopup" visible="false">
        <mx:LinkButton label="Tag1" />
        <mx:LinkButton label="Tag2" />
        <mx:LinkButton label="Tag3" />      
    </mx:HBox>

    <mx:Image source="@Embed(source='../icons/userIcon.png')"/>
    <mx:Label id="username" text="Nickname" visible="false"/>

</mx:VBox>


谢谢

您可以尝试creationcompleted方法。与以下内容类似:

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="200" creationComplete="creationCompletedHandler(event)">

您可以尝试creationcompleted方法。与以下内容类似:

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="200" creationComplete="creationCompletedHandler(event)">

您会收到错误消息,因为在调用setName函数时,id为“username”的标签组件尚未初始化

您可以在UserComp中创建属性,并设置绑定到该属性的标签文本属性。在setName函数中,将值赋给刚创建的属性。创建标签组件时,它将使用属性中的值显示在屏幕上

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="200" >

<mx:Script>
    <![CDATA[
        [Bindable]
        private var _name;
        public function setName(name:String):void {
            _name=name;
        }

       public function setTags(Tags:String):void {

        }

    ]]>
    </mx:Script>

    <mx:HBox id="tagsPopup" visible="false">
        <mx:LinkButton label="Tag1" />
        <mx:LinkButton label="Tag2" />
        <mx:LinkButton label="Tag3" />      
    </mx:HBox>

    <mx:Image source="@Embed(source='../icons/userIcon.png')"/>
    <mx:Label id="username" text="{_name}" visible="false"/>

</mx:VBox>

您会收到错误消息,因为在调用setName函数时,id为“username”的标签组件尚未初始化

您可以在UserComp中创建属性,并设置绑定到该属性的标签文本属性。在setName函数中,将值赋给刚创建的属性。创建标签组件时,它将使用属性中的值显示在屏幕上

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="200" >

<mx:Script>
    <![CDATA[
        [Bindable]
        private var _name;
        public function setName(name:String):void {
            _name=name;
        }

       public function setTags(Tags:String):void {

        }

    ]]>
    </mx:Script>

    <mx:HBox id="tagsPopup" visible="false">
        <mx:LinkButton label="Tag1" />
        <mx:LinkButton label="Tag2" />
        <mx:LinkButton label="Tag3" />      
    </mx:HBox>

    <mx:Image source="@Embed(source='../icons/userIcon.png')"/>
    <mx:Label id="username" text="{_name}" visible="false"/>

</mx:VBox>

我自己也遇到了这个问题,发现了问题的另一个方面,creationPolicy属性:


如果在自定义组件中设置creationPolicy=“all”,则在创建该组件时,它将创建其所有子组件。否则,它会延迟到最后一分钟。这使得创建速度变慢,但如果您需要立即编写所有代码,这就允许您这样做,而无需对其进行黑客攻击。这为我解决了问题,希望能有所帮助。

我自己也遇到了这个问题,并发现了问题的另一个方面,creationPolicy属性:


如果在自定义组件中设置creationPolicy=“all”,则在创建该组件时,它将创建其所有子组件。否则,它会延迟到最后一分钟。这使得创建速度变慢,但如果您需要立即编写所有代码,这就允许您这样做,而无需对其进行黑客攻击。这解决了我的问题,希望能有所帮助。

我实际上需要从主应用程序而不是从组件调用setName函数。我复制的第一部分代码来自主应用程序,我从那里调用方法。我实际上需要从主应用程序而不是从组件调用setName函数。我复制的代码的第一部分来自主应用程序,我从那里调用该方法。