Question

J'ai un HTTPService qui renvoie des données XML.

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

J'ai aussi un DataGrid à l'aide des données renvoyées et passant également le moteur de rendu qui fonctionne parfaitement.

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

Pour chaque résultat dans les données xml J'ai un code qui crée une nouvelle panel() et 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);
        }

Cependant, je ne suis pas en mesure d'utiliser le même {data.name} dans ce que je fais renderer dans le moteur de rendu DataGrid. Au lieu de cela, je reçois « undefined » pour chaque champ ... Comment puis-je aller à passer le {httpService.lastResult.item} à la page aussi renderer?

EDIT: Les modifications apportées ..

Ceci est le gestionnaire de résultat 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);
                    }
            }
         }

J'ai aussi essayé ..

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

J'ai aussi changé la pR.data = data dans la fonction viewstack_addChild. Je reçois les informations contenues dans le DataGrid encore, et je reçois les données sur chaque page rendue mais chaque page a la même information (le premier résultat) au lieu de chaque résultat pour chaque page ...

Était-ce utile?

La solution

Je ne recommanderais pas faire l'objet dataProvider étant les données renvoyées par le service HTTP plutôt lier une variable à utiliser pour stocker ces données. Ensuite, tous les temps de composant d'interface utilisateur initialisé ou ne peut pas l'utiliser.

[Bindable]
var httpDataService:Object;

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

.     }

DataGrid ...

dataprovider = "{httpDataService}"

d'autres composants de l'interface utilisateur

dataProvider = httpDataService

ou dans votre cas

 data = httpDataService

RAPPELEZ Flex a les cotrols que l'initialisation paresseuse, donc si votre autre contrôle n'est pas initialisé au point où vous faites votre demande http il est hors de la chance. Ce qui suit est de la référence de la pile de vue, mais à peu près applique à tout contrôle qui ne sont pas visibles à l'utilisateur jusqu'à ce que sélectionné ...

Note: La politique de création par défaut pour tous les conteneurs, à l'exception du conteneur d'application, est la politique du conteneur parent. La stratégie par défaut pour le conteneur d'application est automatique. Dans la plupart des cas, par conséquent, ne sont pas créés jusqu'à ce qu'ils soient sélectionnés les enfants du contrôle View Stack. Vous ne pouvez pas définir la propriété selectedChild à un enfant qui n'a pas encore créé.

Autres conseils

Je pense que le problème est que vous définissez données à PageListRenderer, qui ressemblent étrangement à une classe au lieu des données que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top