2012-02-10 14 views
0

私は、配列内の各MovieClipsにイベントリスナーを登録するメソッドを持っています。このメソッドはクラス内にあり、リスナー関数もそうです。問題は、宣言されているにもかかわらず、「定義されていないプロパティhandleNavToggleへのアクセス」というエラーが表示されていることです。イベントリスナー関数が認識されない

アイデア?

public class Navigation { 

    var navItems:Array; 

    public function Navigation(navitems:Array) { ... } 

    private function registerNavigationEvents():void { 
     for each(var item:MovieClip in this.navItems) { 
      item.addEventListener(MouseEvent.MOUSE_OVER, this.handleNavToggle); 
      item.addEventListener(MouseEvent.MOUSE_OUT, this.handleNavToggle); 
     } 
    } 

    public function handleNavToggle(e:MouseEvent):void { 
     var mc:MovieClip = e.currentTarget as MovieClip; 
     mc.gotoAndStop((mc.currentFrame == 1) ? 2 : 1); 
    } 

    ... 
} 

答えて

0

のみ、以下の状況で本当に必要な場合を除きthisを使用しての習慣、から出て行け:

  1. something.property = this;
  2. method(this);
  3.  

    public function method(property:int):void 
    { 
        this.property = property; 
    } 
    

あなたのコードを修正してthisを除外してみてください。

public class Navigation 
{ 

    private var _navItems:Array = []; 

    public function Navigation(navItems:Array) 
    { 
     _navItems = navItems.slice(); 
     _registerNavigationEvents(); 
    } 

    private function _registerNavigationEvents():void 
    { 
     for each(var i:MovieClip in _navItems) 
     { 
      i.addEventListener(MouseEvent.MOUSE_OVER, _handleNavToggle); 
      i.addEventListener(MouseEvent.MOUSE_OUT, _handleNavToggle); 
     } 
    } 

    private function _handleNavToggle(e:MouseEvent):void 
    { 
     var mc:MovieClip = MovieClip(e.target); 
     mc.gotoAndStop((mc.currentFrame == 1) ? 2 : 1); 
    } 

} 
+0

ありがとう、それは仕事をした:) – Nick

0

これを取り除く。関数名の前に関数名を渡してください。それ以外の場合は、プロパティを探していると思っています。何らかの理由でこの["handleNavToggle"]のように感じるかもしれません。

+0

悲しいことに、これらの方法のどれもが奇妙な何かが何らかの理由でその関数のスコープで起こっている:( – Nick

+0

を働いていない、あなたがそのファイルの全体のソースを投稿することができ、多分ちょうどいくつかのランダムな構文上の問題が、あなたが投稿したものから私は間違っているとは思わない。 – shaunhusain

関連する問題