Заполнить ArrayCollection с помощью HTTPService - PullRequest
0 голосов
/ 11 ноября 2009

Да, есть такой вопрос, но нет активности и нет ответа.

Я хочу загрузить данные из внешнего XML-файла, используя HTTPService, и в ResultEvent того же HTTPService я хочу, чтобы он заполнил ArrayCollection данными из XML.

Я думаю, что ArrayCollection является идеалом для этого XML. но я открыт для предложений.

XML

<?xml version="1.0" encoding="utf-8"?>
<PhotoGalleryData>
    <Photo>
        <id>1</id>
        <name>Summer Vacation</name>
        <description>In vacation</description>
        <source>vacation.JPG</source>
    </Photo>
    <Photo>
        <id>2</id>
        <name>Winter Vacation</name>
        <description>coold</description>
        <source>vacation2.JPG</source>
    </Photo>
</PhotoGalleryData>

Я думал, что этой простой строки в getDataResultHandler() будет достаточно для заполнения ArrayCollection.

<mx:HTTPService id="getData"
        url="{XMLDataFileLocation}"
        fault="getDataFaultHandler()"
        result="getDataResultHandler()"/>

[Bindable]
private var PhotoData:ArrayCollection;

private function getDataResultHandler():void
{
    PhotoData = new ArrayCollection(getData.lastResult.PhotoGalleryData.photo)
}

Но я думаю, что это не так, потому что просто чтобы убедиться, что я поместил список, связанный с ArrayCollection, чтобы увидеть, действительно ли он заполнен.

<mx:List dataProvider="{PhotoData}" labelField="name"/>

И в списке не было данных, поэтому он не работает так, как должно быть.

Спасибо за любую помощь.

EDIT

Примечание

Используется <mx:List/> только для того, чтобы уверен, что ArrayCollection действительно населенный, он не будет использоваться в Приложение.


Результаты по совету Божо.

С изменениями Божо Flex больше не сообщает об ошибке типа var, но как только я запускаю ее. Adobe Flash сообщает об этом.

Ошибка типа: ошибка № 1034: приведение типа не удалось: не удалось преобразовать mx.utils :: ObjectProxy @ 22cd311 для mx.collections.ArrayCollection. в ФОТОГалерея / getDataResultHandler () [C: \ Users \ Fabio Antunes \ Документы \ Flex Builder 3 \ Фото Галерея \ SRC \ ActionScripts \ PhotoGallery.as: 56] в ФОТОГалерея / __ getData_result () [C: \ Users \ Fabio Antunes \ Документы \ Flex Builder 3 \ Фото Галерея \ src \ PhotoGallery.mxml: 23] в flash.events::EventDispatcher/dispatchEventFunction () в flash.events::EventDispatcher/dispatchEvent () в mx.rpc.http.mxml :: HTTPService / http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\http\mxml\HTTPService.as:290] в mx.rpc :: AbstractInvoker / http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:193] в mx.rpc :: Ответчик / результат (а) [C: \ автосборки \ 3.2.0 \ рамки \ проекты \ RPC \ SRC \ х \ \ RPC Responder.as: 43] в mx.rpc :: AsyncRequest / квитирования () [C: \ автосборки \ 3.2.0 \ рамки \ проекты \ RPC \ SRC \ тх \ RPC \ AsyncRequest.as: 74] в DirectHTTPMessageResponder / completeHandler () [C: \ автосборки \ 3.2.0 \ рамки \ проекты \ RPC \ SRC \ тх \ сообщениями \ каналы \ DirectHTTPChannel.as: 403] в flash.events::EventDispatcher/dispatchEventFunction()

Ну и строка 23, что Flash сообщает об ошибке своей:

PhotoData = ArrayCollection(event.result);

Строка 23:

result="getDataResultHandler(event)"

Ответы [ 2 ]

3 голосов
/ 12 ноября 2009

Если вы можете использовать XMLListCollection вместо ArrayCollection, процесс преобразования результирующего объекта будет более простым. Здесь - хорошее руководство, объясняющее, как это сделать.

РЕДАКТИРОВАТЬ:

Ключевые вещи, которые можно извлечь из этого урока:

  • Вам необходимо установить формат результата службы на e4x.
  • вам нужно привести результирующий объект как XML объект, извлечь повторяющиеся узлы как XMLList и построить XMLListCollection из списка следующим образом:

    private function httpService_result(evt:ResultEvent):void 
    {
         var xmlList:XMLList = XML(evt.result).path.to.repeating.element;
         xmlListColl = new XMLListCollection(xmlList);
    }
    
0 голосов
/ 11 ноября 2009

Вы можете упростить ваш скрипт следующим образом:

<mx:HTTPService id="getData" url="{XMLDataFileLocation}"/>
<mx:List dataProvider="{getData.lastResult.Photo}" labelField="name"/>

lastResult вашего getData будет корнем вашего XML. Получив lastResult.Photo, вы получите XMLList фотографий.

...