поставщик данных Flex не работает, если XML имеет одно значение узла или меньше - PullRequest
1 голос
/ 20 мая 2010

Я получаю эту ошибку, когда извлекаю XML, который имеет только 1 узел (без повторяющихся узлов), и пытаюсь сохранить его в ArrayCollection. -Если у меня более 1 «именных» узлов ... я НЕ получаю ошибку. Мой тест показывает, что XMLListCollection НЕ работает.

TypeError: Error #1034: Type Coercion failed: cannot convert "XXXXXX" to mx.collections.ArrayCollection.

эта ошибка возникает в виде строки кода:

myList= e.result.list.name;

Почему ArrayCollection не может работать с одним узлом? Я использую эту коллекцию ArrayCollection в качестве поставщика данных для Компонента - есть ли альтернатива, которую я могу использовать, которая будет принимать ОБОИХ единичных и повторяющихся узлов, а также работать в качестве поставщика данных? Заранее спасибо!

код:

[Bindable]
private var myList:ArrayCollection= new ArrayCollection();

        private function getList(e:Event):void{

            var getStudyLoungesService:HTTPService = new HTTPService();
            getStuffService.url = "website.com/asdf.php";
            getStuffService.addEventListener(ResultEvent.RESULT, onGetList);
            getStuffService.send();

        }

        private function onGetList(e:ResultEvent):void{

            myList= e.result.list.name;
        }

Ответы [ 4 ]

1 голос
/ 20 мая 2010

проблема здесь в том, что если у вас есть только одна строка, Flex будет жаловаться, так как он не может использовать результат как arrayCollection.

Моя работа заключалась в том, чтобы вы поместили количество строк в ваш XML с данными, которые вы хотите вернуть: например я сделал:

<list><nr_rows>3</nr_rows><name>...</name><name>...</name><name>...</name></list>

Поэтому, когда я получаю результат обратно, я проверяю, сколько строк я получаю (Вы можете получить количество строк, возвращаемых из запроса MySQL, с помощью mysql_num_rows)

e.result.list.nr_rows

Таким образом, если это один, вы добавляете Object в arrayCollection, если их больше одного, вы можете просто использовать result и приравнять его к AC (в этом случае проекты - AC):

if (event.result.list.nr_rows == '1'){
    myList.addItem(event.result.list.name);
} else {
    myList = event.result.list.name;
}
0 голосов
/ 09 мая 2013

У меня только что была эта проблема сегодня, и она привела меня к этому вопросу. Я не уверен, что ваш вариант использования точно такой же, как у меня, но вы можете попробовать showRoot="true" на mx: Tree. Кажется, заставляет показывать корневой узел, когда есть только один элемент, и игнорируется несколькими элементами.

0 голосов
/ 07 июля 2011

Если вы не особенно заинтересованы в получении окончательного результата в ArrayCollection, вы можете сделать следующее, чтобы получить окончательный результат в XMLList или XMLListCollection.

1) установите для свойства resultFormat HTTPService значение e4x.

2) Не упоминайте имя корневого тега xml при обращении к нему. Ссылка на вывод: myList: XMLList = e.result.name.

Работает, имеет ли извлеченный XML один или несколько элементов.

0 голосов
/ 03 ноября 2010

добавить объект строки, чтобы получить возможность работы строки узла XML, но я думаю, что есть лучший способ, является ли ActionScript столь же мощным, как Java?

...