Pregunta

Tengo un HTTPService que devuelve datos XML.

<mx:HTTPService id="httpService" url="data/Software.xml" resultFormat="e4x" result="httpResult_handler(event)" fault="Alert.show('XML Data Error')" />

También tengo una cuadrícula de datos utilizando los datos devueltos y también a transmitirlo al procesador que funciona perfecto.

<mx:DataGrid id="myDG" 
dataProvider="{httpService.lastResult.item}"
headerHeight="0"
editable="false"
width="100%" height="100%" 
rowHeight="50"
itemClick="switchView(myDG.selectedItem.name);">

<mx:columns>
<mx:DataGridColumn itemRenderer="com.xd.components.renderers.SoftwareListRenderer" />
</mx:columns>

</mx:DataGrid>

Para cada resultado en los datos XML que tienen un código que crea un nuevo panel() y render.

private function viewstack_addChild(name:String):void {
            var p:Panel = new Panel();
            p.id = name;
            p.name = name;
            p.title = name;
            p.percentWidth = 100;
            p.percentHeight = 100;
            var randColor:uint = Math.random() * 0xFFFFFF;
            p.setStyle("backgroundColor", randColor);
            var pR:PageListRenderer = new PageListRenderer();
            var data:Object;
            //Do something to get the data to be displayed;
            pR.data = PageListRenderer;
            p.addChild(pR);
            myViewStack.addChild(p);
        }

Sin embargo, yo no soy capaz de utilizar la misma {data.name} en este procesador como lo hago en el procesador de cuadrícula de datos. En su lugar me sale "indefinido" para cada campo ... ¿Cómo hago para pasar el {httpService.lastResult.item} a la página de render también?

EDIT: Los cambios realizados ..

Este es el control de resultados HTTPService.

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = XML(evt.result).descendants("item");
                    var item:Object = data;
                    for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

También he intentado ..

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = httpService.lastResult.item;
                     var item:Object = data;
                     for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

También cambió el pR.data = data en la función viewstack_addChild. Estoy recibiendo la información en la cuadrícula de datos todavía, y yo estoy recibiendo los datos en cada página representada sin embargo, cada página tiene la misma información (el primer resultado) en lugar de cada resultado para cada página ...

¿Fue útil?

Solución

Yo recomendaría no hacer el dataProvider siendo los datos devueltos por el servicio HTTP en lugar unen una variable que se utilizará para almacenar estos datos. Entonces cualquier clima componente de interfaz de usuario inicializado o no puede utilizarlo.

[Bindable]
var httpDataService:Object;

function getData():void 
{
   hpptDataService = httpService.lastResult.item;

.     }

datagrid ...

dataprovider = "{httpDataService}"

otros componentes de interfaz de usuario

dataProvider = httpDataService

o en su caso

 data = httpDataService

recordar Flex tiene las cotrols como la inicialización perezosa así que si su otro control no se ha inicializado en el punto en el que hace su petición HTTP que está fuera de suerte. La siguiente es la referencia de vista de pila, pero más o menos se aplica a cualquier control que no es visible para el usuario hasta que selecciona ...

Nota: La política de creación por defecto para todos los envases, salvo el contenedor de aplicaciones, es la política del contenedor primario. La política por defecto para el contenedor de aplicación es auto. En la mayoría de los casos, por lo tanto, los niños del control Ver Pila no se crean hasta que se seleccionan. No se puede establecer la propiedad selectedChild a un niño que aún no ha sido creado.

Otros consejos

Creo que el problema es que ajuste los datos para ser PageListRenderer, que se parecen sospechosamente a una clase en lugar de los datos que desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top