0

ユーザーがログインボタンをクリックしたときにカスタム LoginEvent をディスパッチする単純なフォームである Flex のカスタムログインコンポーネントがあります。


<?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」で制御できますが、「ハンドル」を取得できないようです...私は何を間違っていますか?

ありがとう。

4

3 に答える 3

1

ああ!私はそれを理解しました...それは私の大きな見落としでした...それは当時の1つにすぎません...

コンポーネントがまだ作成されていないため、コンポーネントのハンドルを取得できませんでした...コンポーネントのcreationCompleteイベントが発生するのを待ってから、イベントリスナーを追加するだけで、これを修正しました。

于 2008-09-25T15:54:22.967 に答える
0

私が信じているこのようなこともできます:

<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->メタデータタグは必要ありません
  • コンポーネントタグのイベントプロパティ->メタデータタグが必要
于 2008-10-26T12:22:54.913 に答える
0

次のようなこともできます。

<custom:login_form id='cLogin' login='_handler' />
于 2008-09-25T17:47:03.507 に答える