最後のタブがコントロールに新しいタブを追加する特別な「+」タブであるという点で、Firefoxのように機能させようとしているTabNavigatorがあります。これを行うには、を使用して取得した最初のタブのボタンにイベントハンドラーを追加します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);
}
}