Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   AMF Value Objects и ассоциативные массивы, коллизии имен (http://www.flasher.ru/forum/showthread.php?t=130311)

pavel.f 23.09.2009 11:44

AMF Value Objects и ассоциативные массивы, коллизии имен
 
Это уже ответ на вопрос :)

Столкнулся с проблемой коллизий имен-ключей при передаче ассоциативного массива.

Описание проблемы:
из пхп во flex передаю класс типа

PHP код:

class Vo_DataGrid_Response_Sorter
{
    public 
$columns;


, где
PHP код:

$columns = array(
  array(
"name" => "id""sort" => "ASC"),
  ...


во флексе VO такой

Код AS3:

[Bindable]
[RemoteClass(alias="Vo_DataGrid_Response_Sorter")]
public class SorterVO
{
    public var columns:Array;
}

при получении результата от RemoteObject, дамп поля columns полученного SorterVO, получается такого типа (обратите внимание что элементы массива имеют тип Array):

Код:

...
columns = (Array)
  [0] (Array)
      [name] "id"
      [sort] "ASC"
  ...

при этом не могу обратится к ключу columns[0]["sort"], а columns[0]["name"] - все в порядке, более того columns.lengt выдает 1 (должно быть 2)

Рассуждения:

Ассоциативные массивы в AS - есть объекты с полями, которые и есть ключи массива(можно обращаться как obj.field, так и obj["field"]).

Каким бы образом я не пытался создать ассоциативный массив типа Array, он его переводит в тип Object, то есть конструкции, которую я получил при ответе не должно быть в принципе, а должно быть так
Код AS3:

columns = (Array)#27
  [0] (Object)#28
    name = "user.id"
    sort = "ASC"
  ...

, далее

в классе Array есть функция sort, и при обращении columns[0]["sort"], я просто напросто вызывал эту функцию, то есть при приведении к типу Array мой ключ "sort" не добавился в массив.

Решение проблемы:
при передаче ассоциативного массива из PHP нужно его сделать объектом

Код:

[columns] => Array
(
  [0] => stdClass Object
    (
      [name] => user.id
      [sort] => ASC
    )
    ...
)

примерно так
PHP код:

...
foreach (
$сolumns as $column) {
    
$columnObject = new stdClass();
    
$columnObject->name $column['name'];
    
$columnObject->sort   $column['sort'];
    
$columnsObjects[] = $columnObject;
}
return 
$columnsObjects;
... 



Часовой пояс GMT +4, время: 11:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.