AS3 - 获取按钮实例名称和路径

时间:2011-09-08 19:46:14

标签: actionscript-3

如何跟踪点击“section1.btnback”?

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

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

感谢。 乌利

4 个答案:

答案 0 :(得分:1)

我不确定你要求的是什么。如果我的建议不适合你,请原谅。如果你写

 trace(event.target)

您将看到按钮实例的完整名称。

答案 1 :(得分:0)

我猜你想要它说: “按钮被点击了!”每次按下按钮时控制台?

trace(“单击了Section1.btnback!”);

我相信。 (真的不确定你要的是什么)

- 在下面的评论中扩展 -

答案 2 :(得分:0)

如果你想在3lionz的答案评论中提到像meddlingwithfire这样的“完整路径”,那么你可以使用我为你创建的课程。该类称为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

答案 3 :(得分: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本身添加和事件侦听器,如果您不确定实际单击的是哪个视觉元素。