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