2

基本的に私はこの機能を持っています:

private function clickURL(url:String):Function{
    trace("Function has been instantiated");
    return function(event:MouseEvent):void{
        trace("Function has been run");
        ExternalNavigation.newBrowserWindow(url);
    }
}

この関数の目的は、URL を取得し、その URL を別の関数に入れ、その関数を返すことで、次のように入力するだけです。

urlButton.addEventListener(MouseEvent.CLICK, clickURL("http://test.com"));

関数 clickURL は、イベント パラメータを持つ関数を addEventListener 関数に返します。そのようにして、ボタンを押したときに開く URL を指定します。

これを使用した場合の出力は次のとおりです。

//Function has been instantiated

ボタンをクリックしても、internatl 関数は実行されません。そこで、何も見逃していないことを確認するために、偽のイベントで試してみようと思いました.

var clickTest:Function = clickURL("http://stackoverflow.com");
clickTest(new MouseEvent(MouseEvent.CLICK));

出力は次のとおりです。

//Function has been instantiated
//Function has been run

ご覧のとおり、両方の関数が実行されています。addEventListenerではなく、なぜこれが機能しているのか、誰かが考えましたか?

よろしくZ

4

2 に答える 2

1

これは問題なく動作するはずです...

urlButton.addEventListener(MouseEvent.CLICK, trace);ボタンをクリックすると、痕跡が残りますか?

編集:

私は本当にそれを再現することはできません...これは完全に機能するコードです:

package {
    import flash.display.*;
    import flash.events.*;
    public class Main extends Sprite {
        private var urlButton:Sprite;
        public function Main():void {
            this.addChild(this.urlButton = new Sprite());
            this.urlButton.graphics.beginFill(0xFF00FF);
            this.urlButton.graphics.drawRect(0, 0, 200, 50);
            urlButton.buttonMode = true;
            urlButton.addEventListener(MouseEvent.CLICK, clickURL("http://test.com"));
        }
        private function clickURL(url:String):Function{
            trace("Function has been instantiated");
            return function(event:MouseEvent):void{
                trace("Function has been run");
            }
        }       
    }
}

機能しない最小限のセットアップを投稿/アップロードできますか?

あいさつ

back2dos

于 2009-06-26T19:57:06.447 に答える
-1

すぐにわかる問題の 1 つは、関数がリスナーとして初期化されたときにのみ変数 url が存在し、マウス イベントによってトリガーされたときには存在しないことです。したがって、実際には実行時に null 値を受け取ります。(またはエラーをスローします)

あなたが示したように、リスナーはイベントが発生したときに期待どおりに設定および実行されているため、ボタンがイベントを適切にトリガーしない場合、ボタンに問題がある可能性がありますか?

于 2009-06-26T15:51:19.440 に答える