我有一个TabNavigator,我正在尝试像Firefox一样工作,因为最后一个标签是一个特殊的“+”标签,它为控件添加了一个新标签。为此,我将事件处理程序添加到第一个选项卡的按钮,我使用tabNavigator.getTabAt(0).addEventListener(MouseEvent.CLICK, clickFunction, false, int.MAX_VALUE, false)
。我将优先级设置为int.MAX_VALUE
,因此我的方法应该是第一个被调用的方法,然后可以阻止使用stopImmediatePropagation()
调用其他处理程序。
我的问题是不时会调用我的点击处理程序,而是运行正常逻辑并切换到“+”标签。
CustomTab的代码(我删除了很多专有代码):
private var addTab:Function = null;
private var tabCreationAllowed:Boolean = true;
private function onCreationCompleted():void {
var tabButton:Button = getTab(0);
Container(getChildAt(0)).setStyle("closable", false);
tabButton.addEventListener(MouseEvent.CLICK, clickFunction, false, int.MAX_VALUE, false);
tabButton.addEventListener(MouseEvent.DOUBLE_CLICK, function(event:MouseEvent):void {event.stopImmediatePropagation(); }, false, int.MAX_VALUE, false);
}
private function clickFunction(event:MouseEvent):void {
event.stopImmediatePropagation();
if (this.tabCreationAllowed && (this.addTab != null) && (event.eventPhase == EventPhase.AT_TARGET)) {
this.tabCreationAllowed = false;
this.addTab();
var $this:CustomTab = this;
setTimeout(function ():void {
$this.tabCreationAllowed = true;
}, 1500);
}
}
答案 0 :(得分:0)
在尝试了很多不同的事情之后,最好我能说出问题是TabBar
用来创建标签按钮的TabNavigator
可以切换什么按钮做什么(甚至可能删除和添加)但仅在添加或删除标签时。为了解决这个问题,我将“+”按钮存储在一个类变量中。然后我覆盖所有添加和删除方法。在每个我调用一个方法,从按钮中删除所有事件侦听器,如果我有一个,将变量设置为最后一个选项卡的按钮(这是“+”选项卡),然后重新添加监听器。
最终代码的缩减版本:
private var addTab:Function = null;
private var tabCreationAllowed:Boolean = true;
private var addTabButton:Button = null;
private function prerAddTabButton():void {
if (addTabButton != null) {
addTabButton.removeEventListener(MouseEvent.CLICK, clickFunction);
addTabButton.removeEventListener(MouseEvent.DOUBLE_CLICK, doubleClickFunction);
}
addTabButton = getTabAt(numChildren - 1);
addTabButton.addEventListener(MouseEvent.CLICK, clickFunction, false, int.MAX_VALUE, false);
addTabButton.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickFunction, false, int.MAX_VALUE, false);
}
private function onCreationCompleted():void {
var tabButton:Button = getTab(0);
Container(getChildAt(0)).setStyle("closable", false);
prerAddTabButton();
}
private function doubleClickFunction(event:MouseEvent):void {
event.stopImmediatePropagation();
}
private function clickFunction(event:MouseEvent):void {
event.stopImmediatePropagation();
if (this.tabCreationAllowed && (this.addTab != null) && (event.eventPhase == EventPhase.AT_TARGET)) {
this.tabCreationAllowed = false;
this.addTab();
var $this:CustomTab = this;
setTimeout(function ():void {
$this.tabCreationAllowed = true;
}, 1500);
}
}