0

我正在使用带有 php 和 MySQL 的 Flex 4.6 来开发基于浏览器的应用程序。登录后,应用程序使用我的 php 类中的 RemoteObject 填充 cueItem 对象的 ArrayCollection(称为 cueArray)。

我有一个带有绑定到 cueArray 的自定义 ItemRenderer 的列表。ItemRenderer 有两个按钮,完成和取消。单击取消时,特定的 cueItem.state 变量(通过更改 ItemRenderer 内的 data.state 来调用)从“已提示”更改为“已取消”。cueArray 上的 eventListener 然后触发 changeEvent 使用 RemoteObject 更新数据,然后从 cueArray 中删除单击的 cueItem 对象。

诀窍是,如果 RemoteObject 调用失败(由于连接断开),则状态应更改回“已提示”,并且不应从 cueArray 中删除该项目。如果调用结果事件处理程序,则应从 cueArray 中删除该项目。

问题是在 Result 和 Fault 事件处理程序中,我无权访问单击了哪个 cueArray 项。我意识到有解决方法,但我正在寻找一个优雅的解决方案。例如,在 Result 事件处理程序中,我可以让我的 php 函数返回已更改的 cueItem 的 ID,但这并不能解决故障处理程序的问题。

你有什么想法?

先感谢您!

伊恩

4

1 回答 1

0

Target 和 currentTarget 将返回对远程处理的引用。您将无法避免某个getCueItemByID方法,因为当您调用远程服务时,事件传播链会中断。您还可以将待处理的 cueItems 存储在动态对象中,最后将它们返回到 Fault 或 Result(以下只是一个示例,由于我不知道您如何管理您的项目,因此缺少部分):

private var pendingItems:Object = {};

private function onCueArrayChange(event:CollectionEvent):void
{
    // No idea how you get your current cueItem...
    item = getConcernedItem();

    pendingItems[item.id] = item;
    remoteCall();
}

private function onFault():void
{
    var myItem = pendingItems[myId];
}
于 2011-12-08T09:16:28.390 回答