AS3如何确定事件的顺序

时间:2011-12-01 03:34:32

标签: actionscript-3 flex events list

我正在使用flex-4-tree(https://github.com/wasbridge/flex-4-tree) 在手机AIR app。

树克拉斯:

public class Tree extends List
{
    ...
    dataSource.addEventListener(TreeEvent.NODE_EXPANDED, nodeExpandedHandler);
    dataSource.addEventListener(TreeEvent.NODE_COLLAPSED, nodeCollapsedHandler);
    ...
}

应用程序的主屏幕上有一个菜单。 如果用户选择菜单项,则采取适当的操作, 但是如果用户通过选择扩展器图标来扩展/折叠菜单项, 菜单项已展开/折叠。

目前收到列表更改事件 flex-4-tree展开/折叠事件。

我之前需要接收flex-4-tree展开/折叠事件 列表更改事件。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在处理程序中为ListChangeEvent设置一个计时器,该计时器将任何操作推迟到十分之一秒。然后,如果您在计时器结束之前进行扩展/合同事件,则可以取消更改事件的操作。像这样:

private var _expandEventOccurred:Boolean = false;

private function handleListChange(evt:Event):void {

    var timer:Timer = new Timer(100,1);  //100ms = 0.1s
    timer.addEventListener(TimerEvent.TIMER_COMPLETE, handleListChangeTimerEvent);
    timer.start();

}

private function handleExpandContract(evt:Event):void {

    _expandEventOccured = true;

    //perform whatever other actions you need for the expand/contract event

}

private function handleListChangeTimerEvent(evt:Event):void {

    if(_expandEventOccured) {
        _expandEventOccured = false;
        return;
    }

    _expandEventOccured = false;  //needed here as well

    //perform whatever other actions you need for the list change event 

}

这不是世界上最干净的东西,但应该做到这一点。希望有所帮助!