如何在 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 中获取自定义组件的句柄?的主要内容,如果未能解决你的问题,请参考以下文章

从窗口句柄获取自定义 .NET 类的组件类型

flex 覆盖公共函数集数据

如何创建自定义 Flex 4 组件

在 Flex 中的自定义组件之间传递值 - mxml [关闭]

flex 自定义组件

Flex 4 从自定义组件调度自定义事件(为啥 flex 将自定义事件转换为 mouseevent)