Я не могу получить доступ к значениям в объекте Flex (ArrayCollection) после получения его из Zend AMF. Оригинальный тип послали PHP ассоциативный массив, который просто возвращается какДоступ к значениям в результате создания объекта Flex из Zend AMF возникло как ассоциативный массив PHP
return $this->sections['initial_setup'];
PHP Переменные:
требуемый результат послал выглядит в закладки Чарльз АИФ RPC:
Но когда я получаю данные в Flex как Object (или String [] - это не имеет значения), я не может получить доступ к значениям свойств в таком коде
var result:Object = event.result;
if (result['database'] == 'yes' && result['admin'] == 'yes')
// continue branch ...
и я получаю исключение на if-линии:
Error: Unknown Property: 'database'.
at mx.collections::ListCollectionView ...
Наконец, я могу видеть в переменных Eclipse, посмотреть, что экземпляр ResultEvent несет результат типа ArrayCollection с 0 длиной и значение, полученное видны со значком D (я не мог найти то, что D означает украшение):
Но почему я до сих пор не могу получить к ним доступ вообще и что мне делать, чтобы использовать их?
Я попытался изменить типы Array или ArrayCollection вместо Object. Также есть thread, обсуждающий подобную проблему, но после попытки этого это тоже не помогает.
Любая помощь будет высоко ценится: о)
EDIT 1: Вот код FB генерируется супер конструктор класса для ConfigurationService:
// Constructor
public function _Super_ConfigurationService()
{
// initialize service control
_serviceControl = new mx.rpc.remoting.RemoteObject();
// initialize RemoteClass alias for all entities returned by functions of this service
var operations:Object = new Object();
var operation:mx.rpc.remoting.Operation;
operation = new mx.rpc.remoting.Operation(null, "readSettings");
operation.resultType = Object;
operations["readSettings"] = operation;
operation = new mx.rpc.remoting.Operation(null, "writeSettings");
operations["writeSettings"] = operation;
operation = new mx.rpc.remoting.Operation(null, "readDBSettings");
operation.resultType = valueObjects.ConnectionParams;
operations["readDBSettings"] = operation;
operation = new mx.rpc.remoting.Operation(null, "writeDBSettings");
operations["writeDBSettings"] = operation;
operation = new mx.rpc.remoting.Operation(null, "readInitSetupCompletion");
operation.resultType = Object;
operations["readInitSetupCompletion"] = operation;
operation = new mx.rpc.remoting.Operation(null, "writeInitSetupCompletion");
operations["writeInitSetupCompletion"] = operation;
_serviceControl.operations = operations;
_serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
_serviceControl.source = "ConfigurationService";
_serviceControl.endpoint = "gateway.php";
preInitializeService();
model_internal::initialize();
}
Я не понимаю, почему ResultEvent.result является ArrayCollection, когда он должен быть объектом (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/events/ResultEvent. html # result). Вы делаете что-то, чтобы отображать результаты вызова службы как ArrayCollection? Если да, можете ли вы показать этот код? Ассоциативный массив на самом деле не является массивом, он больше похож на словарь или объект. Я бы не ожидал, что вы сможете применить ассоциативный массив к массиву или массиву ArrayCollection. – JeffryHouser
@ www.Flextras.com Я ничего не делаю с результатами, прежде чем он появится в ResultEvent, поэтому я тоже не бросаю его. Фактически, служебный код создается с помощью мастера службы FlashBuilder. Я отредактировал вопрос и добавил код службы конструктора, где вы можете видеть, что для типа 'readInitSetupCompletion' используется тип результата' Object'. Однако при вызове 'convertResultHanler' тип результата изменяется с [] на' ArrayCollection'. Но я не могу найти код src для 'convertResultHanler'. Я был бы очень доволен, когда он остался бы как «Объект», поэтому я мог бы надеяться получить доступ к его свойствам. – Kuba
Я не знаю о методе, и он не входит в поиск Google; но мое подозрение в том, что этот метод превращает что-то таким образом, что этого не должно быть. – JeffryHouser