如何在 Flex 中获取自定义组件的句柄?
Posted
技术标签:
【中文标题】如何在 Flex 中获取自定义组件的句柄?【英文标题】:how do I get a handle to a custom component in Flex? 【发布时间】:2010-09-13 03:19:41 【问题描述】:我在 Flex 中有一个自定义登录组件,它是一个简单的表单,当用户单击登录按钮时会调度自定义 LoginEvent:
<?xml version="1.0" encoding="utf-8"?>
<mx:Form xmlns:mx="http://www.adobe.com/2006/mxml" defaultButton="btnLogin">
<mx:Metadata>
[Event(name="login",tpye="events.LoginEvent")]
</mx:Metadata>
<mx:Script>
import events.LoginEvent;
private function _loginEventTrigger():void
var t:LoginEvent = new LoginEvent(
LoginEvent.LOGIN,
txtUsername.text,
txtPassword.text);
dispatchEvent(t);
</mx:Script>
<mx:FormItem label="username:">
<mx:TextInput id="txtUsername" color="black" />
</mx:FormItem>
<mx:FormItem label="password:">
<mx:TextInput id="txtPassword" displayAsPassword="true" />
</mx:FormItem>
<mx:FormItem>
<mx:Button id="btnLogin"
label="login"
cornerRadius="0"
click="_loginEventTrigger()" />
</mx:FormItem>
</mx:Form>
然后我有一个包含 flex 应用程序的 main.mxml 文件,我将组件添加到应用程序没有任何问题:
<custom:login_form id="cLogin" />
然后我尝试在 actionscript 中连接我的事件:
import events.LoginEvent;
cLogin.addEventListener(LoginEvent.LOGIN,_handler);
private function _handler(event:LoginEvent):void
mx.controls.Alert.show("logging in...");
一切对我来说看起来都不错,但是当我编译时,我得到一个“未定义属性 cLogin 的错误......显然我可以控制 id 为“cLogin”,但我似乎无法获得“它的句柄” ...我做错了什么?
谢谢。
【问题讨论】:
【参考方案1】:你也可以做这样的事情我 相信:
<custom:login_form id='cLogin' login='_handler' />
由于原始代码中似乎存在一些混淆,因此进行了少量澄清。
确实,这样做的原因是元数据标签已用于声明要以这种方式提供的事件。
<mx:Metadata>
[Event(name="login", type="events.LoginEvent")]
</mx:Metadata>
但是,当使用事件侦听器而不是组件“事件”属性 (login='_handler'
) 时,无需添加事件元数据:
cLogin.addEventListener(LoginEvent.LOGIN,_handler);
addEventListener -> 不需要元数据标签
组件标签中的事件属性 -> 需要元数据标签
【讨论】:
【参考方案2】:我相信你也可以这样做:
<custom:login_form id='cLogin' login='_handler' />
【讨论】:
【参考方案3】:啊!我想通了...这是我的一个重大疏忽...这只是那些日子之一...
我无法获取组件的句柄,因为它尚未创建...我通过简单地等待组件的 creationComplete 事件触发然后添加事件侦听器来解决此问题。
【讨论】:
以上是关于如何在 Flex 中获取自定义组件的句柄?的主要内容,如果未能解决你的问题,请参考以下文章