Flex Ajuste dataProvider para um itemRenderer
-
18-09-2019 - |
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 ...
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.