为整个符号添加事件监听器

Add Event-Listener for the whole Symbol

我将一个 Label 和一个 ComboBox 放在一个 Symbol 中,如下面的代码所示。

public class LabelCombo extends MovieClip {     


        //myLabel is an instance of fl.controls.Label
        //myCombo is an instance of fl.controls.ComboBox
        public function LabelCombo() {              
        }


        public function setLabelText(s:String):void{
            myLabel.text = s;
        }

        public function getLabelText():String{
            return myLabel.text;
        }



        public function removeAllItems():void{
            if(myCombo.dataProvider.length > 0)
                myCombo.removeAll();
        }


        public function setSingleItem(o:Object):void{
            removeAllItems();
            myCombo.addItem(o);
        }


        public function setList(itemList:Array):void{
            for(var i:int = 0; i < itemList.length; i++){
                if(i==0)
                    setSingleItem(itemList[i]);
                else
                    addSingleItem(itemList[i]);
            }
        }


        public function addSingleItem(o:Object):void{
            for(var i:int = 0; i < myCombo.dataProvider.length; i++){
                    if(o == myCombo.getItemAt(i))
                        return;
                }
            myCombo.addItem(o);
        }


        public function addList(itemList:Array):void{
            for(var i:int = 0; i < itemList.length; i++){
                addSingleItem(itemList[i]);
            }
        }

        public function getSelectedItem():Object{
            return myCombo.selectedItem;
        }

        public function getItemByLabel(s:String):Object{
            return Object(myCombo.getChildByName(s));
        }

        public function selectItemAt(index:int):void{
            myCombo.selectedIndex = index;
        }

        public function getselectedIndex():int{
            return myCombo.selectedIndex;
        }

    }

现在我想addEventListener(Event.CHANGE, changeHandler) 在整个 Symbol 上,所以我可以做类似的事情

trace(LabelCombo(event.currentTarget).getLabelText())

trace(LabelCombo(event.currentTarget).getSelectedItem().data)

我需要来自两个单一控件的信息。 如果有人能告诉我如何做到这一点,那就太好了。

提前致谢

编辑:我认识到存在一些误解: 我需要这个来通过 XMLSocket 进行通信。服务器必须知道两件事:1) ComboBox 的名称是什么(在这种情况下,我使用 myLabel 获取名称)2) 新选择的索引 希望现在一切都清楚了

您只需将事件侦听器设置为 myCombo,但侦听器应位于 LabelCombo 的代码中,这样您就不需要使用 event.currentTarget 的技巧,只需使用this 与子对象一起工作的上下文,因为侦听器只会由该对象的 myCombo 子对象的变化触发。

myCombo.addEventListener(Event.CHANGE,onChange,false,0,true);
function onChange(e:Event):void {
    trace(getSelectedItem().data);
}

我真的不明白你的问题,但你可以试试这个

public class LabelCombo extends MovieClip {     
        //myLabel is an instance of fl.controls.Label
        //myCombo is an instance of fl.controls.ComboBox
        public function LabelCombo() { 
              myLabel.addEventlistener(Event.CHANGE,onChange);
              myCombo.addEventlistener(Event.CHANGE,onChange);

        }
        private function onChange(e:Event):void {
             dispatchEvent(new Event(Event.CHANGE));
        } 
        }

向标签和组合添加更改事件侦听器。使用 dispatchEvent 你可以调度自定义事件。 你可以这样使用

var labeCombo:LabelCombo = new LabelCombo();
addChild(labeCombo);
labeCombo.addEventlistener(Event.CHANGE,onChangeMv);
function onChangeMv(e:Event){
    trace(labeCombo.getLabelText());
    trace(labeCombo.getSelectedItem().data);
}

您可以使用自定义事件 class 与事件调度程序一起发送数据。

我的意思不是这个:

trace(LabelCombo(event.currentTarget).getLabelText())

这样尝试:(如果可能的话)

LabelCombo.setLabelText("Just_A_Test");
var str_Check : String = LabelCombo.getLabelText();
trace ("returned string is : " + str_Check);


它应该说 returned string is : Just_A_Test...


如果 LabelCombomyCombo 的子项,那么正确的引用路径是:myCombo.LabelCombo.getLabelText(); 等等等等