1

这个真的让我很困惑。我正在调度IndexChangedEvent我自己创建的一个,在调度之前设置oldIndexandnewIndex属性。当在适当的处理程序中接收到事件时,oldIndexandnewIndex值将作为 -1 接收,即使我已经验证它们(使用Alert.show())在发送之前是正确的值。

我正在这样创建它:

var myEvent:IndexChangedEvent = new IndexChangedEvent(IndexChangedEvent.HEADER_SHIFT, false, false, null, 3, 2);

这些3,2参数只是我用于调试的参数,它们应该(并且我已经验证它们确实如此)设置 IndexChangedEvent 的oldIndexnewIndex属性。然后我立即像这样发送事件:

dispatchEvent(myEvent);

处理程序设置如下:

report.addEventListener(IndexChangedEvent.HEADER_SHIFT, shiftHandler);

这是处理程序代码:

private function shiftHandler(event:IndexChangedEvent):void {
    if (event.oldIndex == -1 || event.newIndex == -1) {
        Alert.show("-1 index received");
    }
}

为了帮助确保我没有发疯,这是我在调度事件之前的实际代码:

var myEvent:IndexChangedEvent = new IndexChangedEvent(IndexChangedEvent.HEADER_SHIFT, false, false, null, 3, 2);
Alert.show(myEvent.oldIndex + " : " + myEvent.newIndex);
dispatchEvent(myEvent);

每次我移动标题(触发事件)时,我都会得到 2 个警报框,一个显示3 : 2,另一个显示-1 index received。这让我疯狂。有人可以让我知道为什么我的事件属性没有在调度中持续存在吗?

4

1 回答 1

2

只是一种预感,但对我来说,这听起来好像你是IndexChangedEvent从其他地方发送的,也许是你代码中的另一个监听器。如果您查看事件的文档oldIndex,则和属性的默认值newIndex都是 -1,因此类似以下内容会导致您收到错误事件:

dispatchEvent(new IndexChangedEvent(IndexChangedEvent.HEADER_SHIFT)); 

您是否尝试过在您的代码库中搜索对 的引用IndexChangedEvent.HEADER_SHIFT

于 2012-08-21T23:51:38.643 回答