代码之家  ›  专栏  ›  技术社区  ›  mmattax

如何在Flex中获取自定义组件的句柄?

  •  0
  • mmattax  · 技术社区  · 16 年前

    
    <?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>
    

    然后我有一个主.mxml包含flex应用程序的文件,我将组件添加到应用程序中没有任何问题:

    
    <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”控制了它,但我似乎无法获得“它的句柄”……我做错了什么?

    谢谢。

    3 回复  |  直到 16 年前
        1
  •  1
  •   mmattax    16 年前

    啊!我想出来了…这是我的一个大疏忽…这只是其中的一天。。。

    我无法获取组件的句柄,因为它还没有创建……我只需等待组件的creationComplete事件触发,然后添加事件侦听器来解决这个问题。

        2
  •  0
  •   JustLogic    16 年前

    <custom:login_form id='cLogin' login='_handler' />
    
        3
  •  0
  •   widged widged    16 年前

    你也可以这样做我 相信:

    <custom:login_form id='cLogin' login='_handler' />
    

    事实上,这是因为元数据标记被用来声明将以这种方式可用的事件。

    <mx:Metadata>
        [Event(name="login", type="events.LoginEvent")]
    </mx:Metadata>
    

    但是,不需要添加事件元数据而不是组件“event”属性( login='_handler'

    cLogin.addEventListener(LoginEvent.LOGIN,_handler);
    
    • addEventListener->不需要元数据标记
    • 组件标记中的事件属性->需要元数据标记