0

我只想将焦点处理程序处理到我想听的组件,而不是处理该组件内部的子项。示例我在该 vgroup 容器中有一个 vgroup 我有 UI 控件,如 TextInput、TextArea、ComboBox 并且我想监听 VGroup 的焦点,所以我为 VGroup 保留了 focusoutHandler 但是当我将焦点从 textinput 更改为 textarea 或组合框 focusoutHandler 被调用.如何只为 VGroup 提供 focusOut。

<s:VGroup id="vGroup" focusOut = vGroupFocusOutHandler(event)>
   <s:TextInput />
   <s:TextArea/>
   <s:ComboBox/>  
<s:VGroup/>
4

2 回答 2

1

您必须确保用户关注的对象不是 VGroup 的子对象(直接或间接)。如果孩子,我们什么都不做;如果不是,我们就做必须做的事情。

就是这样:

<s:VGroup id="vGroup" focusOut="handleFocusOut(event)">
    <s:TextInput />
    <s:TextArea />
    <s:ComboBox />  
</s:VGroup>

.

private function handleFocusOut(event:FocusEvent):void {
    //only do something if we focus out of vGroup
    if (!isInVGroup(event.relatedObject)) {
        trace(event);
    }
}

private function isInVGroup(el:InteractiveObject):Boolean {
    if (!el || !el.parent) return false;

    var parent:DisplayObjectContainer = el.parent;
    while (parent != vGroup && parent != stage) {
        parent = parent.parent;
    }

    return parent == vGroup;
}

relatedObject属性是用户关注的元素。

于 2012-06-27T11:15:19.393 回答
1

您可以在事件处理程序代码中尝试此操作:

private function handleFocusOut(event:FocusEvent):void {
    //only do something if we focus out of vGroup
    if (!this.contains(event.relatedObject)) {
        trace(event);
    }
}
于 2013-06-19T19:12:42.613 回答