Доступ к данным, отправленным на серверную функцию через RemoteObject в обработчиках ошибок и результатов - PullRequest
0 голосов
/ 08 декабря 2011

Я использую Flex 4.6 с php и MySQL для разработки приложения на основе браузера.После входа в систему приложение заполняет ArrayCollection (называемый cueArray) объектов cueItem с помощью RemoteObject из моего класса php.

У меня есть список с пользовательским ItemRenderer, который связан с cueArray.ItemRenderer имеет две кнопки, Завершить и Отмена.При нажатии отмены конкретная переменная cueItem.state (вызывается путем изменения data.state внутри ItemRenderer) изменяется с «cued» на «отменено».EventListener на cueArray затем запускает changeEvent, который обновляет данные с помощью RemoteObject, а затем удаляет выбранный объект cueItem из cueArray.

Хитрость заключается в том, что если сбой вызова RemoteObject (из-за разорванного соединения), состояние должно бытьизменилось обратно на «cued», и элемент не должен быть удален из cueArray.Если вызывается обработчик события результата, элемент должен быть удален из cueArray.

Проблема заключается в том, что в обработчиках событий Result и Fault у меня нет доступа к тому, какой элемент cueArray был нажат.Я понимаю, что есть обходные пути, но я ищу изящное решение.Например, в обработчике события Result я могу заставить мою функцию php возвращать идентификатор cueItem, который был изменен, но это не решает мою проблему с обработчиком ошибок.

У вас есть идеи?

Заранее спасибо!

Ян

1 Ответ

0 голосов
/ 08 декабря 2011

Target и currentTarget будут возвращать ссылки на удаленное взаимодействие.Вы не сможете избежать метода getCueItemByID, так как при вызове удаленного сервиса цепочка распространения событий разрывается.Вы также можете сохранить ожидающие cueItems в динамическом объекте и, наконец, вернуть их обратно в «Ошибка» или «Результат» (ниже приведен только пример, в котором отсутствует часть, поскольку я не знаю, как вы управляете своими элементами):

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];
}
...