Domanda

Ho un HTTPService che restituisce i dati XML.

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

Inoltre ho un datagrid utilizzando i dati restituiti e anche di passarlo al renderer che funziona perfettamente.

<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>

Per ogni risultato nei dati XML ho qualche codice che crea una nuova panel() e renderer.

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);
        }

Comunque io non sono in grado di utilizzare lo stesso {data.name} in questo renderer come faccio in renderer DataGrid. Invece ottengo "non definito" per ogni campo ... Come potrei fare per passare il {httpService.lastResult.item} alla pagina renderer anche?

EDIT: Le modifiche apportate ..

Questo è il gestore di risultati 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);
                    }
            }
         }

Inoltre ho provato ..

        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);
                    }
            }
         }

Ho cambiato anche il pR.data = data nella funzione viewstack_addChild. Io sono sempre le informazioni nel datagrid ancora, e sto ottenendo i dati su ogni pagina visualizzata tuttavia ogni pagina ha le stesse informazioni (il primo risultato), invece di ogni risultato per ogni pagina ...

È stato utile?

Soluzione

Raccomando di non rendere il dataProvider essendo i dati restituiti dal servizio http piuttosto legano una variabile da utilizzare per memorizzare questi dati. Poi ogni tempo componente di interfaccia utente inizializzato o non è possibile utilizzarlo.

[Bindable]
var httpDataService:Object;

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

.     }

datagrid ...

dataprovider = "{httpDataService}"

altri componenti dell'interfaccia utente

dataProvider = httpDataService

o nel tuo caso

 data = httpDataService

ricordare Flex ha le cotrols come l'inizializzazione pigra quindi se il vostro altro controllo non è inizializzato nel punto in cui si effettua la richiesta HTTP è fuori di fortuna. Quanto segue è dal riferimento guarda la pila ma praticamente si applica a qualsiasi controllo che non è visibile all'utente fino selezionata ...

Nota: La politica di creazione di default per tutti i contenitori, ad eccezione del contenitore di applicazioni, è la politica del contenitore principale. Il criterio predefinito per il contenitore Application è auto. Nella maggior parte dei casi, quindi, i bambini del controllo View Stack non vengono creati fino a quando non sono stati selezionati. Non è possibile impostare la proprietà selectedChild ad un bambino che non è ancora creata.

Altri suggerimenti

Credo che il problema è che si imposta i dati di essere PageListRenderer, che sembrano sospettosamente come una classe, invece di dati che si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top