Isso é precisamente o que já experimentei, mas os dados não são correctamente atribuidos, ficando o arraycollection a 0. Não entendo mesmo porquê. Se for array, funciona, já que os dados regressam do php como array, mas se tentar colocar os dados num arraycollection dessa forma, não funciona.
Parece-me que vou ter de dividir os dados em estruturas diferentes, todas de 1 nivel, ao invés do que pretendia fazer, vários niveis de VOs. MV 2009/4/24 rui <[email protected]> > > Miguel Vaz escreveu: > > > > Sim, entendo que o Array não faça dispatch de eventos, e pretendo que > > a estrutura seja ArrayCollection, mas o problema é que essa (com > > array) é a única forma de conseguir que o flex receba os dados, embora > > erradamente, com a estrutura interior não como VO, mas como Object. > > > > Mesmo fazendo casting do array do result que tem os VOs secundários, o > > flex simplesmente ignora os dados, mantendo o arraycollection null. > > > > Amanhã farei novos testes, mas admito que isto me está a deixar pelos > > cabelos. Mais porque acho que estou a entender o processo, e mesmo > > assim algo falha. > > > > MV > > > > > > > > > > 2009/4/23 Nuno Fernandes <[email protected] > > <mailto:[email protected]>> > > > > > > Podes sim ter VO's dentro de ArrayCollection emq ue o > > ArrayCollection é > > uma propriedade de outro VO, so que o exemplo que deste na classe > > > > public var getofcilcores:Array = new Array(); > > > > o getofcilcores é um Array e não um ArrayCollection, logo não é > > capaz de > > efectuar o dispatch the eventos caso haja alterações. > > > > da seguinte forma é capaz de dar menos problemas > > > > public var getofcilcores:ArrayCollection = new ArrayCollection (); > > > > se tudo estiver correcto não deveras ter problemas a passar a info do > > PHP para o FLEX e vice-versa > > > > > > Miguel Vaz escreveu: > > > > > > Já tenho tudo mais ou menos a funcionar, apenas com uma dúvida: > > > > > > E se pretender ter um VO dentro de outro VO? Não da forma como no > > > exemplo do João Fernandes, em que um segundo VO existe dentro do > > > primeiro, mas apenas uma vez, e sim ter, por exemplo, um VO com uma > > > propriedade que será um arraycollection de outro tipo de VO. > > > > > > Algo assim: > > > > > > > > > package vo > > > { > > > import com.adobe.cairngorm.vo.IValueObject; > > > > > > import mx.controls.Text; > > > > > > [RemoteClass(alias="vo.getOFcilindrosVO")] > > > > > > [Bindable] > > > public class getOFcilindrosVO implements IValueObject { > > > > > > public var num_of:Number; > > > > > > public var obs1:Text; > > > public var obs2:Text; > > > public var obs3:Text; > > > > > > public var posicao:Number; > > > > > > public var getofcilcores:Array = new Array(); // aqui > > fica um > > > arraycollection de VOs > > > > > > > > > } > > > } > > > > > > O getofcilcores é um array que terá um outro VO em cada indice. O > > > problema é que o interior é recriado como Object. Do PHP os dados > > > regressam correctamente, um VO com propriedades e um Array com > > indices > > > como VOs. A transferência é que falha. > > > > > > A questão é se deverei ter uma função dentro do VO para transferir > > > valor a valor e construir devidamente o getofcilcores como > > > arraycollection de VOs. > > > > > > Confuso? :-) > > > > > > Algo como ter um pessoasVO que tem uma propriedade que é uma > > lista de > > > hoteisVO, por exemplo. > > > > > > De qualquer forma, muito obrigado pelas dicas, foram extremamente > > > esclarecedores, acho que já entendi como posso lidar > > convenientemente > > > com VOs. Apesar de darem algum trabalho, os dados ficam melhor > > > estruturados e com extras acrescidos. > > > > > > MV > > > > > > > > > > > > > > > > > > > > > 2009/4/23 Nuno Fernandes <[email protected] > > <mailto:[email protected]> > > > <mailto:[email protected] <mailto:[email protected]>>> > > > > > > > > > Pois Miguel o teu problema é estares a usar o > > > modelo.OFgeral[posicao].propriedade="dados". > > > > > > O que se passa é que esse tipo de alterações não fazem que o > > > ArrayCollection faça o dispatch do evento CollectionChange. > > A melhor > > > forma é mesmo como eu exemplifiquei, > > > > > > modelo.OFgeral.removeItemAt(posicao) > > > modelo.OFgeral.addItemAt(posicao,null) > > > o metodo addItem provoca o dispatch do evento > > CollectionChange e tudo > > > começa a funcionar. > > > > > > o que tu chamaas de "limpar" ou "atribuição"do ponto de > > vista do > > > ArrayCollection é a mesma coisa, alteração em um item. Eu > > geralmente o > > > que faço é no VO do FLEX tenho um campo que me indica se o > > item é para > > > ser usado, visível, ou qualquer outra coisa, e faço a > > alteração a esse > > > nivel, assim sempre posso ter filterFunctions associadas ao > > > ArrayCollection e outras coisas mais :D > > > > > > Abraços > > > > > > Miguel Vaz escreveu: > > > > > > > > No meu modelo eu tenho: > > > > > > > > OFgeral:ArrayCollection = new ArrayCollection(); > > > > > > > > Antes de fazer a chamada à base de dados, tenho uma rotina > que > > > corre o > > > > OFgeral à procura de posições disponíveis (que se traduzem em > > > janelas > > > > abertas), onde irá colocar os resultados. Daí existir no > > command > > > > apenas uma atribuição e não um addItem. O addItem só é > > feito uma > > > vez, > > > > antes da chamada à BD, se a posição estiver abtera, caso > > contrário > > > > apenas limpo os dados nessa posição > > (modelo.OFgeral[posicao]=null) e > > > > reinsiro o VO. > > > > > > > > Os meus binds, como no exemplo do text, são sempre > > > > {modelo.OFgeral.getItemAt(posicao).propriedade}, para > > atribuições, > > > > faço modelo.OFgeral[posicao].propriedade="dados". > > > > > > > > De qualquer forma, de momento não posso fazer nenhum > > teste, já que > > > > estou em casa, mas amanhã vou analisar melhor a situação e > > deixo > > > aqui > > > > o que encontrar. Vou rever melhor o código e ver se existe > > alguma > > > > coisa que me está a escapar, já que o projecto começa a > > ganhar uma > > > > dimensão considerável. > > > > > > > > Agradeço imenso o tempo e a paciência que estão todos a ter. > > > Aprecio o > > > > esforço, já que isto dos VOs é mais uma lacuna nos meus > > > conhecimentos. > > > > Lacuna de um assunto que considero bastante importante > > para uma > > > > eficiente gestão/organização de transmissão de dados. > > > > > > > > Quem sabe daqui a uns meses vos dou um assunto > > interessante para uma > > > > eventual apresentação num dos eventos. ;-) O projecto que > > estou a > > > > desenvolver é algo um pouco à margem do habitual em > > projectos de > > > flex, > > > > e poderá ser interessante como case study para mostrar > algumas > > > > utilizações menos vistas com flex. > > > > > > > > MV > > > > > > > > > > > > > > > > > > > > > > > > 2009/4/22 Nuno Fernandes <[email protected] > > <mailto:[email protected]> > > > <mailto:[email protected] <mailto:[email protected] > >> > > > > <mailto:[email protected] > > <mailto:[email protected]> <mailto:[email protected] > > <mailto:[email protected]>>>> > > > > > > > > > > > > Bom tenho que vazar, mas aqui fica a info > > > > > > > > 1. o OFgeral _*TEM*_ que ser do tipo ArrayCollection, > se > > > for um > > > > Array, não há bandings > > > > 2. para "mexeres" num ArrayCollection não usamos a > mesma > > > técnica do > > > > Array [index], usamos os metodos getItemAt(index), > > > > addItemAt(index) e removeItemAt(index) por exemplo > > > > > > > > Se o OFgeral for um ArrayCollection nas labels só tens > que > > > colocar: > > > > > > > > text="{modelo.OFgeral.getItemat(1).num_of}" > > > > > > > > mas na function result isto : > > > > > > > > modelo.OFgeral[posicao]= tempor; > > > > > > > > deve ser substituido por > > > > > > > > modelo.OFgeral.addItemAt(posicao, tempor); > > > > > > > > Mas le a DOC sobre esses métodos, porque no caso do > > > addItemAt se nesse > > > > index já existir algo, esse conteudo passa para o index a > > > seguir e > > > > assim > > > > sucessivamente, se quiseres alterar o conteudo de um > > index no > > > > ArrayCollection o que deves fazer é primeiro removes e > > depois > > > > adicionas. > > > > > > > > Abraços > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Podes ir a propriedades source do arrayCollection que basicamente é um > array normal. > > logo terias: > > public var getofcilcores:ArrayCollection = new ArrayCollection (); > getofcilcores.source = evt.result as array > > > não sei se era isto que querias... > > abraço, > rui cruz > > > > > > --~--~---------~--~----~------------~-------~--~----~ Recebeu esta mensagem porque está inscrito em Grupo "Mailing List da Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do Grupos Google. Para enviar mensagens para este grupo, envie um email para [email protected] Para anular a inscrição neste grupo, envie um email para [email protected] Para mais opções, visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT -~----------~----~----~----~------~----~------~--~---
