как получить дескриптор пользовательского компонента во Flex? - PullRequest
0 голосов
/ 25 сентября 2008

У меня есть пользовательский компонент входа в 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>

Затем у меня есть файл main.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 ... ясно, что у меня есть контроль с идентификатором" cLogin ", но я не могу получить" дескриптор этого " ... что я делаю не так?

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 сентября 2008

ах! Я понял это ... это был большой недосмотр у меня ... это только один из тех дней ...

Мне не удалось получить дескриптор моего компонента, потому что он еще не был создан ... Я исправил это, просто подождав, пока не сработает событие creationComplete компонента, а затем добавил прослушиватель события.

0 голосов
/ 26 октября 2008

Вы также можете сделать что-то вроде этого, я верь:

<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 -> тег метаданных не требуется
  • свойство события в теге компонента -> тег метаданных требуется
0 голосов
/ 25 сентября 2008

Вы также можете сделать что-то вроде этого, я верю:

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