为整个Symbol添加Event-Listener

时间:2015-06-30 06:52:19

标签: actionscript-3 flash combobox addeventlistener

我已将Label和ComboBox放在符号中,如下面的代码所示。

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) 整个符号所以我可以做那样的事情

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

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

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

提前致谢

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

3 个答案:

答案 0 :(得分:1)

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

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);
}

您可以使用custome事件类与事件调度程序一起发送数据。

答案 1 :(得分:0)

您只需将事件监听器设置为myCombo,但监听器应位于LabelCombo的代码中,这样您就不需要event.currentTarget的技巧,只需使用{{ 1}}上下文与子项一起使用,因为侦听器只会被此对象的this子项中的更改触发。

myCombo

答案 2 :(得分:0)

我的意思是代替这个:

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 ...


如果 LabelCombo myCombo 的孩子,那么正确的参考路径是:myCombo.LabelCombo.getLabelText();等等。