在Fault和Result处理程序中通过RemoteObject访问发送到服务器功能的数据

时间:2011-12-08 04:33:10

标签: php flex actionscript remoteobject

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

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

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

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

你有什么想法吗?

提前谢谢!

伊恩

1 个答案:

答案 0 :(得分:0)

Target和currentTarget将返回对远程处理内容的引用。您将无法避免使用getCueItemByID方法,因为在您呼叫远程服务时,事件传播链会中断。您还可以将待处理的cueItem存储在动态对象中,最后将它们返回到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];
}