为整个符号添加事件监听器
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
...
如果 LabelCombo 是 myCombo 的子项,那么正确的引用路径是:myCombo.LabelCombo.getLabelText();
等等等等
我将一个 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
...
如果 LabelCombo 是 myCombo 的子项,那么正确的引用路径是:myCombo.LabelCombo.getLabelText();
等等等等