Pergunta

Eu tenho um HTTPService que os dados retornos xml.

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

Eu também tenho um datagrid usando os dados retornados e também passá-la para o processador que funciona perfeito.

<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 nos dados XML Eu tenho algum código que cria uma nova panel() e renderizador.

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

No entanto, eu não sou capaz de usar o mesmo {data.name} nesse representante como eu faço no renderizador datagrid. Em vez disso eu recebo "indefinido" para cada campo ... Como eu iria sobre passando o {httpService.lastResult.item} ao renderizador página também?

EDIT: As alterações feitas ..

Este é o manipulador 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);
                    }
            }
         }

Eu também tentei ..

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

Eu também mudou a pR.data = data na função viewstack_addChild. Eu estou recebendo as informações no datagrid ainda, e estou recebendo os dados em cada página processada no entanto, cada página tem a mesma informação (o primeiro resultado) em vez de cada resultado para cada página ...

Foi útil?

Solução

Eu recomendaria não fazer o dataProvider sendo os dados retornados do serviço http em vez ligam uma variável a ser usado para armazenar dados. Então qualquer tempo UI componente inicializado ou não pode usá-lo.

[Bindable]
var httpDataService:Object;

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

. }

datagrid ...

dataprovider = "{httpDataService}"

outros componentes de interface do usuário

dataProvider = httpDataService

ou no seu caso

 data = httpDataService

lembre-Flex tem as cotrols como inicialização lenta por isso, se o seu outro controle não é inicializado no ponto onde você tem seu http solicitá-lo está fora de sorte. O seguinte é a partir da referência vista pilha, mas praticamente se aplica a qualquer controle que não é visível para o usuário até selecionado ...

Nota: A política de criação padrão para todos os recipientes, exceto o container Application, é a política do recipiente pai. A política padrão para o recipiente de aplicação é automática. Na maioria dos casos, portanto, os filhos do controle de exibição de pilha não são criados até que eles são selecionados. Você não pode definir a propriedade selectedChild a uma criança que ainda não foi criado.

Outras dicas

Eu acho que o problema é que você definir os dados a ser PageListRenderer, que parecem ser uma classe em vez dos dados que você deseja.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top