确定Flex事件的默认行为

时间:2010-04-20 21:21:45

标签: flex

如何判断可取消事件的默认行为是什么?

例如,我在某处读到TextEvent.TEXT_INPUT具有默认行为,默认行为包括添加与按下的键与TextInput关联的文本字符。这很有道理。

但如果我没有读过,那我怎么知道默认行为是什么?除了猜测。在这种情况下,它可能是显而易见的。但在其他情况下,它可能不是。

例如,在文档中,查看DataGridEvent.HEADER_RELEASE的cancelable属性。它说:

cancelable:true

因此,似乎存在与DataGridEvent.HEADER_RELEASE事件关联的“默认行为”。但它是什么?如果我不确定它是什么,为什么我会取消它呢? :)

感谢。

2 个答案:

答案 0 :(得分:0)

全部在documentation中,它说:“DataGrid控件有一个默认的处理程序,用于实现单列排序的事件。”

直播文档非常详尽。如果你继续关注链接,你通常会找到你想要的东西。

答案 1 :(得分:0)

这就是我认为的真实 -

要取消与事件关联的默认行为,必须确定两件事:

  1. 事件必须标记为可取消(您可以检查事件的可取消属性以确定此情况)。如果您自己调度事件,请将3rd参数设置为true以将事件标记为可取消。如果事件被标记为可取消,则调用event.preventDefault()会将事件设置为“cancelled”,并且event.isDefaultPrevented()的查询将返回true。如果事件未标记为可取消,则调用event.preventDefault()将不执行任何操作。无论您调用event.preventDefault()多少次,event.isDefaultPrevented()的查询都将返回false。

  2. 为事件注册的事件处理程序实际上必须能够不执行任何操作(即阻止与事件关联的默认行为)。所以处理程序必须包含这样的内容:

    if(!event.isDefaultPrevented()){doSomething(); }

  3. 所以,这仍然留给我一个问题 - “对于X类型的可取消事件,默认行为是什么?”

    我想这取决于事件的目标。例如,DataGridEvent.HEADER_RELEASE事件的目标是DataGrid,在DataGrid类中,您可以在构造函数中找到它:

    addEventListener(DataGridEvent.HEADER_RELEASE,
                         headerReleaseHandler,
                         false, EventPriority.DEFAULT_HANDLER);
    

    并且处理程序如下所示:

    private function headerReleaseHandler(event:DataGridEvent):void
    {
        if (!event.isDefaultPrevented())
        {
            manualSort = true;
            sortByColumn(event.columnIndex);
            manualSort = false;
        }
    }
    

    或者,你可以永远漫无目的地浏览文档,也许会发现这样的答案:

    http://livedocs.adobe.com/flex/3/langref/mx/controls/DataGrid.html#event%3aheaderRelease

    “DataGrid控件具有此事件的默认处理程序,用于实现单列排序”

    希望这个答案有助于减少文档搜索的漫无目的。

    杰里米