Evitar binding ou referência

2 views
Skip to first unread message

Miguel Vaz

unread,
May 5, 2013, 2:09:51 PM5/5/13
to ri...@googlegroups.com
Boa tarde,

Como posso evitar que isto aconteça?

- tenho este package:

package vo
{

[Bindable] // não posso retirar isto porque é necessário para outras situações
public class tralhaVO
{
public var nome:String;
...(montes de parâmetros)

public function tralhaVO(obj:Object = null)
{
if(obj != null){
this.nome = obj.nome;
...
}
}
}
}

- imaginem que tenho um ArrayCollection (listaTralhas) em que cada itemé um tralhaVO.

- quero copiar os valores  de um determinado indice para uma outra variável sem manter ligação:

var tralha2:tralhaVO = new tralhaVO(listaTralhas[3]);

- tralha2 fica com os valores do VO na posição 3, mas se alterar alguma coisa na original, a tralha2 reflecte essas alterações. O que não quero que aconteça. Aliás, até o inverso acontece.

ao fazer o new tralhaVO() não deveria eliminar o bind? Até o facto de usar [] não deveria manter o bind, correcto?

Agradecia alguma ajuda na solução que imagino seja uma estupidez da minha parte, como é habitual. Vai ser uma vírgula, um ponto ou o raio algures.

Muito obrigado.


MV


Hugo Ferreira

unread,
May 5, 2013, 2:17:54 PM5/5/13
to ri...@googlegroups.com
Boa tarde,

Não tem nada have com o metadata Bindable (isso é para outras situações como referiste :)).
Neste caso como passas os valores primitivos no construtor, não devias de ter problemas (excepto para valores não primitivos como outras instancias de classes tuas).
Ve bem se no teu construtor não terás algo esquecido do género: this = obj, ou algo do género ! Sem ver o código completo é díficil.


--
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.
 
Para anular a subscrição deste grupo e parar de receber emails deste grupo, envie um email para riapt+un...@googlegroups.com.
Para publicar uma mensagem neste grupo, envie um e-mail para ri...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT.
Para mais opções, consulte https://groups.google.com/groups/opt_out.
 
 


Cristovão Morgado

unread,
May 5, 2013, 3:10:47 PM5/5/13
to Hugo Ferreira, ri...@googlegroups.com
Não existe pra ai um .clone ou .copy ?

Sent from my Lumia

From: Hugo Ferreira
Sent: 05/05/2013 19:17
To: ri...@googlegroups.com
Subject: Re: [riapt] Evitar binding ou referência

João Fernandes

unread,
May 5, 2013, 3:20:47 PM5/5/13
to riapt
Sim existe o ObjectUtil.clone() ou copy(). O clone é uma extend do copy() onde garante a unicidade do UID.

Se é pretendido que seja uma simples cópia, o copy() chegará perfeitamente.
O que é usado na realidade é o uso da serialização de objectos em AMF3 e recorrendo a byteArray. Existem algumas situações a ter em conta como propriedades [Transient] mas mais pode ser lido aqui http://archive.darronschall.com/weblog/2007/08/on-transient-objectutilcopy-and-casting.html
Sem dúvida a forma mais rápida de duplicar um objecto em memória.


2013/5/5 Cristovão Morgado <cristova...@gmail.com>



--

João Fernandes

Miguel Vaz

unread,
May 5, 2013, 5:46:34 PM5/5/13
to ri...@googlegroups.com
Boa noite

Obrigado pelas respostas. O VO é mesmo apenas isso. E é uma atribuição muito simples. Ajuda se disser que o listaTralhas está num modelo que tem bindable? Acho que não me recordo de ter este problema antes. Certamente estou a cometer algum erro crasso, mas até o descobrir vou andar aqui às aranhas linha a linha em debug. :-)



MV


2013/5/5 Hugo Ferreira <hferre...@gmail.com>

Miguel Vaz

unread,
May 5, 2013, 5:48:46 PM5/5/13
to ri...@googlegroups.com
O copy() parece-me bem, mas não é um pouco derrotar o propósito? Por outras palavras, não deveria ser ao contrário? Uma atribuição deveria, por defeito, fazer um copy, e não criar uma referência ao objecto orgianl, certo? A referência é que devia ser por escolha e não defeito. Mas é como digo, tenho de ver melhor as coisas já que, desde que escrevi a pergunta, ainda não peguei mais nisto.

Muito obrigado a todos. :-)

MV


2013/5/5 Miguel Vaz <pago...@gmail.com>

Hugo Ferreira

unread,
May 5, 2013, 5:55:51 PM5/5/13
to ri...@googlegroups.com
Boa noite,

Bem, sem ver o código na integra, vou mandar 1 bitaite como forma de sugestão. Não terás algurem no código as3 ou mais provavelmente em mxml a two-way binding entre esses 2 objectos, LOL !!

Epá, nunca se sabe porque isto this.nome = obj.nome; nunca será a causa do problema (antes pelo contrário).

Miguel Vaz

unread,
May 5, 2013, 6:22:37 PM5/5/13
to ri...@googlegroups.com
Hugo, nada do género, não uso disso, mas agradeço a tentativa. ;-)

Estou neste momento a alterar o código para acomodar o copy(), mas tenho de dar umas voltas porque utiliza object, ou seja, tenho de converter e reconverter. 

MV

Hugo Ferreira

unread,
May 5, 2013, 6:24:15 PM5/5/13
to ri...@googlegroups.com
OK, foi mesmo só atirar barro à parede na tentativa de dar um dica :)

E sim, eu sem dúvida alguma que usaria a estrategia do copy (até porque imagina que de hoje para amanhã adicionas mais um campo) !

Miguel Vaz

unread,
May 5, 2013, 6:37:54 PM5/5/13
to ri...@googlegroups.com
Sim, entendo, mas o método por defeito ->  var ninja:tralhaVO = new tralhaVO(outraVarAqui); devia tratar desse assunto sem grandes voltas. Independentemente de quantos campos a tralhaVO tiver.

Quanto mais experiência tenho, menos entendo. Flex é feminino, um mistério (perdoem-me a piada sexista).


MV

Miguel Vaz

unread,
May 5, 2013, 6:54:46 PM5/5/13
to ri...@googlegroups.com
Com o copy() já consigo fazer cópias sem referência ao original. Muito obrigado pela dica. Tenho de fazer algumas conversões mas funciona.

MV


2013/5/5 Miguel Vaz <pago...@gmail.com>
Sim, entendo, mas o método por defeito ->  var ninja:tralhaVO = new tralhaVO(outraVarAqui); devia tratar desse assunto sem grandes voltas. Independentemente de quantos campos a tralhaVO tiver.

Hugo Ferreira

unread,
May 5, 2013, 7:09:08 PM5/5/13
to ri...@googlegroups.com
Mas dá dinheiro :)

Miguel Vaz

unread,
May 5, 2013, 9:33:15 PM5/5/13
to ri...@googlegroups.com
haha. Sim. Imenso. Por isso é que somos todos ricos aqui na lista. ;-)


2013/5/6 Hugo Ferreira <hferre...@gmail.com>

Hugo Ferreira

unread,
May 5, 2013, 11:44:35 PM5/5/13
to ri...@googlegroups.com

Quando eu chegar ao primeiro milhão eu aviso, LOL !

Reply all
Reply to author
Forward
0 new messages