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