【问题标题】:How far can one event go and how do I listen for it?一个事件可以走多远,我如何倾听它?
【发布时间】:2011-03-29 22:48:00
【问题描述】:

我在一个 flex 组件中有代码,我想监听一个事件,事件的源是一个自定义类,它由另一个类运行的另一个类运行,等等。我的印象是事件会在整个应用程序中传递,所以我希望我能像这样在类中调度自定义事件..

    private function finishEvent():void {
        var evt:EventDispatcher = new EventDispatcher;
        var finished:Event = new Event("finishedInterpret");
        evt.dispatchEvent(finished);
    }

然后我可以像这样在我的组件中抓取它:

public function interpret(data:Array):void {
    addEventListener("finishedInterpret", applyInferences);
    db.executeBatch();
}

该事件基本上是在 executeBatch 完成时触发的,并且正在调用 finishEvent,但我是侦听器没有得到任何东西。我尝试将其设置为 db.addEventListener,但现在生效了。

【问题讨论】:

    标签: actionscript-3 event-handling addeventlistener dispatchevent


    【解决方案1】:

    事件应该发生的方式是一个对象分派事件,这些事件的消费者监听来自该对象的事件。除非您有一个全局事件分派器(不是典型的),否则没有应用程序范围的事件分派。

    我发现这是最好的使用模式:子组件调度事件,这些子组件的所有者监听他们的事件。例如:

    child.addEventListener("finishedInterpret", applyInferences);
    

    按原样,您的代码正在侦听来自自身的事件

    【讨论】:

    • 啊,我明白了。不幸的是,我正在使用的类中确定事情已经完成的组件被埋在几个级别的类调用中..所以我基本上必须在每个级别上传递一个事件,然后我猜.. hrmph 希望不要必须大量修改该代码
    • 你可以使用事件冒泡。这将允许事件通过多个层传播到显示树中的第一个侦听祖先。
    • 啊..我以为默认情况下已启用。当我尝试将气泡设置为 true 时,它​​是一个只读属性
    • 这是自定义事件还是内置事件?您应该添加一个自定义事件类并将bubbles 参数传递给Event 的构造函数。您只能在施工时将其设为冒泡事件。
    • 冒泡仅通过舞台上的展示对象起作用,从孩子到父母向上。如果没有将对象添加到舞台,事件将不会通过它冒泡。
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多