Apache flex 类中的flex按钮事件侦听器
我在Main.mxml中有许多按钮。我试图将按钮功能移动到一个类中,让类中的事件侦听器响应单击并调用其他函数。我写过: Main.mxmlApache flex 类中的flex按钮事件侦听器,apache-flex,class,button,event-handling,flexbuilder,Apache Flex,Class,Button,Event Handling,Flexbuilder,我在Main.mxml中有许多按钮。我试图将按钮功能移动到一个类中,让类中的事件侦听器响应单击并调用其他函数。我写过: Main.mxml <mx:Button x="23.5" y="10" label="checker" click="{goListen()}" /> <mx:Button id="btnT1" x="252.5" y="10" label="t1" /> <mx:Button id="btnT2" x="309" y="10" label="t
<mx:Button x="23.5" y="10" label="checker" click="{goListen()}" />
<mx:Button id="btnT1" x="252.5" y="10" label="t1" />
<mx:Button id="btnT2" x="309" y="10" label="t2"/>
<mx:Button id="btnT3" x="366" y="10" label="t3"/>
package com.util
按钮Listener.mxml
<mx:Button x="23.5" y="10" label="checker" click="{goListen()}" />
<mx:Button id="btnT1" x="252.5" y="10" label="t1" />
<mx:Button id="btnT2" x="309" y="10" label="t2"/>
<mx:Button id="btnT3" x="366" y="10" label="t3"/>
package com.util
{
导入flash.events.EventDispatcher;
导入flash.events.MouseEvent
import mx.controls.Alert;
import mx.controls.Button;
public final class ButtonListener extends EventDispatcher
{
private var __btnArray:Array;
public function ButtonListener(...btnList)
{
__btnArray = new Array();
for each (var item:Button in btnList)
{
__btnArray.push(item);
}
buildListeners();
}
private function buildListeners():void
{
for each (var item:Button in __btnArray)
{
item.addEventListener(MouseEvent.CLICK, traceMe, false, 0, true);
}
}
private function traceMe(event:MouseEvent):void
{
trace(event.target.label + " was clicked");
}
}
}
因此,当我调试时,我看到数组中充满了按钮,但traceMe()函数无法工作。我不知道怎么才能让它工作。或者我只需要在主类中有30个事件侦听器和相应的函数 由于按钮气泡的click事件,您可以只监听主应用程序文件上的click事件,并将其委托给类中的处理程序函数 或者,您可以单击按钮直接调用处理程序
private var controller:ButtonListener = new ButtonListener();
<mx:Button id="btnT1" x="252.5" y="10" label="t1" click="controller.handleClick(event)"/>
private-var-controller:ButtonListener=new-ButtonListener();
看起来您有两种不同的选择或问题。如果更改中的最后一个参数:
item.addEventListener(MouseEvent.CLICK, traceMe, false, 0, true);
若要false
,则所有操作都应该有效,因为您的事件侦听器将粘住以处理鼠标单击。当然,这意味着如果你第二次点击“checker”按钮,你将有两组监听器对鼠标点击按钮1、2和3做出响应
因此,您感兴趣的真正解决方案很可能是将上面引用的行保持不变,而是更改以下行:
var t:ButtonListener = new ButtonListener(btnT1, btnT2, btnT3);
如果更改上述行以将按钮侦听器存储为类的一部分,则可以响应鼠标单击,而不是进行垃圾收集:
_buttonListener = new ButtonListener(btnT1, btnT2, btnT3);
当然,这假设您已经在mx:script块中定义了\u buttonListener
:
<mx:Script><![CDATA[
var _buttonListener:ButtonListener;
]]></mx:Script>
由于事件监听器将不再超出范围,事件监听器使用的弱引用将按预期工作,当
\uu buttonListener
超出范围时将被垃圾收集。Kaleb,您发布的第一个解决方案是有效的,因为我使用checker按钮作为测试来实例化buttonListener类。然而,当应用程序加载时,我将实例化它。我不能垃圾收集事件侦听器,因为我需要在整个电影中播放所有按钮。但是,我不理解您的第二种解决方案。请您详细说明一下好吗?