Frage

Ich habe ein Http die XML-Daten zurückgibt.

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

Ich habe auch einen Datagrid die zurückgegebenen Daten verwendet und es auch an die Renderer vorbei, die perfekt funktionieren.

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

Für jedes Ergebnis in der XML-Daten habe ich einige Code, der einen neuen panel() und Renderer erstellt.

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

Allerdings bin ich nicht in der Lage die gleichen {data.name} in diesem Renderer zu verwenden, wie ich in den Datagrid-Renderer tun. Stattdessen ich für jedes Feld „undefiniert“ bekommen ... Wie würde ich mich über auch die {httpService.lastResult.item} auf die Seite Renderer vorbei?

EDIT: Änderungen gemacht ..

Dies ist der Http Ergebnis Handler.

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

Ich habe auch versucht haben ..

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

Ich habe auch die pR.data = data in der viewstack_addChild Funktion. Ich erhalte die Informationen im Datenraster noch, und ich erhalte die Daten auf jeder Seite gerendert jedoch jede Seite hat die gleichen Informationen (das erste Ergebnis) statt jedes Ergebnis für jede Seite ...

War es hilfreich?

Lösung

würde ich empfehlen, die Datenprovider nicht machen die Daten aus der HTTP-Dienst eher binden, um eine Variable verwendet werden zurückgegeben werden diese Daten zu speichern. Dann kann jedes UI-Komponente Wetter initialisiert oder kann sie nicht verwendet werden.

[Bindable]
var httpDataService:Object;

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

.     }

Datagrid ...

dataprovider = "{httpDataService}"

andere UI-Komponenten

= Datenprovider httpDataService

oder in Ihrem Fall

 data = httpDataService

erinnert Flex die cotrols als faul Initialisierung hat also, wenn Ihre andere Steuerung nicht an dem Punkt, initialisiert wird, wo Sie Ihre HTTP-Anfrage machen es kein Glück ist. Im Folgenden ist aus der Sicht Stapel Referenz aber ziemlich gilt viel zu jeder Kontrolle, die nicht für den Benutzer sichtbar ist, bis gewählt ...

Hinweis: Die Standard-Erstellungsrichtlinie für alle Behälter, mit Ausnahme der Anwendungscontainer, ist die Politik des übergeordneten Containers. Die Standardrichtlinie für den Application-Container ist auto. In den meisten Fällen werden daher die Ansicht Stack-Steuerung Kinder erst erstellt, wenn sie ausgewählt werden. Sie können nicht die selectedChild Eigenschaft auf ein Kind gesetzt, die noch nicht erstellt.

Andere Tipps

Ich denke, das Problem ist, dass Sie Datensatz PageListRenderer, die aussehen verdächtig nach einer Klasse anstelle der Daten, die Sie wollen.

sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top