Flex topLevelApplication和SuperTabNavigator鼠标事件处理程序

时间:2015-02-04 15:49:27

标签: actionscript-3 flex actionscript mouseevent

我正在使用flex SuperTabNavigator并希望关闭标签检查是否按下了控制按钮。我试过了:

    public static var CONTROL_PRESSED:Boolean = false;

    public function init():void {
        var clickListener:Function =  function _clickListener(event:MouseEvent):void{
            trace(event.ctrlKey);
            if(event.ctrlKey){
                CONTROL_PRESSED = true;
            }else{
                CONTROL_PRESSED = false;
            }
        };

        FlexGlobals.topLevelApplication.addEventListener(MouseEvent.CLICK, clickListener);

    }

问题在于鼠标单击在应用程序中的任何位置都被调用,但选项卡上的除外。我也尝试使用相同的代码,addEventListener(MouseEvent.CLICK, clickListener);将监听器添加到SuperTabNavigator,但它根本不起作用。是否有其他方法可以捕获鼠标?

1 个答案:

答案 0 :(得分:0)

这是因为SuperTabNavigator有一个隐藏MouseEvent的私有鼠标点击处理函数:

private function closeClickHandler(event:MouseEvent):void {
    if(this.enabled) {
        dispatchEvent(new Event(CLOSE_TAB_EVENT));
    }
    event.stopImmediatePropagation();
    event.stopPropagation();
}

您需要修改SuperTab来源中的SuperTabNavigator课程,以便为某些CustomEvent分发您想要的数据,而不是普通的new Event(CLOSE_TAB_EVENT)。< / p>

然后更改onCloseTabClicked中的SuperTabBar功能,了解您的CustomEvent。然后,您可以将其传递给您的应用程序代码(可能将其添加到SuperTabEvent)。