0

我有一个 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);
    }
}
4

1 回答 1

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);  
    }  
}
于 2012-05-02T14:22:31.847 回答