我正在使用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处理程序的问题。
你有什么想法吗?
提前谢谢!
伊恩
答案 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];
}