2011-09-08 3 views
0

"section1.btnback"을 (를) 클릭 한 방법을 추적하려면 어떻게해야합니까?AS3 - 버튼 인스턴스 이름 및 경로 얻기

section1.btnback.addEventListener(MouseEvent.CLICK, getBack) 

    function getBack(event:MouseEvent):void 
    { 
    // trace: "section1.btnback" 
    } 

감사합니다. Uli

답변

1

나는 당신이 무엇을 요구하고 있는지 확실하지 않습니다. 제 제안이 당신에게 옳지 않다면, 제발 저를 용서해주십시오. 작성하는 경우

trace(event.target) 

버튼의 인스턴스 이름이 표시됩니다. 당신은 이와 같은 아주 간단한 재귀 기능을 사용할 수 있습니다

0

나는 다음과 같이 말하고 싶습니다. "버튼을 클릭했습니다!" 버튼을 누를 때마다 콘솔에?

trace ("Section1.btnback was clicked!");

나는 믿습니다. 는 meddlingwithfire이 3lionz의 대답에 자신의 의견에 제안처럼 당신이 "전체 경로를"원하는 경우에 당신이 사용할 수

+0

다음과 같은 것을 찾고 있습니다 : ** trace (event.currentTarget.name) ** - 문제는이 것이 "btnback"만 제공한다는 것입니다. 그러나 버튼의 전체 경로가 필요합니다. – Uli

+0

여기에서 시도하십시오 : http://www.actionscript.org/forums/showthread.php3?t=142581 또는 여기 : http://stackoverflow.com/questions/4680323/help-me-to-find-out-the- object-path-in-flash – 3lionz

+0

표시 목록을 "전체 경로"로 지정 하시겠습니까? – meddlingwithfire

0

below- 의견

-Expanded (당신을 요구하고 있었는지 정말 확실하지 않았다) 나는 그것이 당신을 위해 그것을 만든 클래스. 이 클래스는 DOPath (표시 객체 경로의 약자)라고합니다.

Main.as (문서 클래스) :

package 
{ 
    import com.example.display.DOPath; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Main extends Sprite 
    { 
     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 

     }// end function 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var container1:Sprite = new Sprite(); 
      container1.name = "container1"; 

      var container2:Sprite = new Sprite(); 
      container2.name = "container2"; 

      var square:Square = new Square(); 
      square.name = "square"; 
      square.addEventListener(MouseEvent.CLICK, onSquareClick); 

      addChild(container1); 
      container1.addChild(container2); 
      container2.addChild(square); 

     }// end function 

     private function onSquareClick(e:MouseEvent):void 
     { 
      var square:Square = e.target as Square; 

      var doPath:DOPath = new DOPath(square); 
      trace(doPath); // output: stage.root1.container1.container2.square 

     }// end function 

    }// end package 

}// end package 

import flash.display.Sprite; 

internal class Square extends Sprite 
{ 
    public function Square() 
    { 
     graphics.beginFill(0xFF0000); 
     graphics.drawRect(0, 0, 100, 100); 
     graphics.endFill(); 

    }// end function 

}// end class 

DOPath.as :

package com.example.display 
{ 
    import flash.display.DisplayObject; 
    import flash.display.DisplayObjectContainer; 
    import flash.display.Stage; 

    public class DOPath 
    { 
     private var _parents:Vector.<DisplayObjectContainer>; 
     private var _d:DisplayObject; 

     public function DOPath(d:DisplayObject):void 
     { 
      _d = d; 

      init(); 

     }// end function 

     private function init():void 
     { 
      _parents = new Vector.<DisplayObjectContainer>; 

      pushParent(_d); 

     }// end function 

     private function pushParent(d:DisplayObject):void 
     { 
      if(d.parent) 
      { 
       _parents.push(d.parent); 
       pushParent(d.parent); 

      }// end if 

     }// end function 

     public function toString():String 
     { 
      var path:String = _d.name; 

      for (var i:uint = 0; i < _parents.length; i++) 
      { 
       var name:String = (_parents[i] is Stage) ? "stage" : _parents[i].name; 
       path = name + "." + path; 

      }// end for 

      return path; 

     }// end function 

    }// end class 

}// end package 
를 그것의 예는 디스플레이 오브젝트의 전체 경로를 얻기 위해 사용되는 다음의
0

:

private function getDOname(dob : DisplayObject) : String 
{ 
    var result : String = dob.name; 

    if (dob is UIComponent) 
    { 
     result = UIComponent(dob).id; 
    } 

    if(dob.parent && dob.parent is DisplayObjectContainer) 
    { 
     result = getDOname(dob.parent) + "." + result; 
    } 

    return result; 
} 

당신은 함수에 event.target을 전달하고 클릭 된 버튼을 획득 할 수 있습니다. 이러한 기술을 디버그 목적으로 사용하는 경우 실제로 클릭하는 시각적 요소가 확실하지 않은 경우 클릭 이벤트에 대한 이벤트 리스너를 스테이지 나 SandboxRoot에 추가하기 만하면됩니다.