【问题标题】:how do I get a handle to a custom component in Flex?如何在 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”,但我似乎无法获得“它的句柄” ...我做错了什么?

谢谢。

【问题讨论】:

    标签: apache-flex actionscript-3 actionscript


    【解决方案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 事件触发然后添加事件侦听器来解决此问题。

        【讨论】:

          猜你喜欢
          • 2011-12-25
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          相关资源
          最近更新 更多