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