Será que neste caso ele não poderia usar o ObjectUtil.copy(itemADuplicar)
???
Júlio, vc sabe se este método tem algum problema de performance? Pq parece
uma solução mais simples...

Acho que o único problema seria o que está explicado neste post:
http://www.darronschall.com/weblog/2007/08/on-transient-objectutilcopy-and-casting.cfm
Talvez seja necessário registrar a classe antes de copiar o objeto.


[]'s
Zé Alexandre

2010/1/22 Júlio César Ködel <[email protected]>

> Só remendando um erro meu:
>
> Infelizmente o Flex não possue a interface ICloneable, então a função clone
> é específica da sua classe.
>
> Confundi com .net onde tenho a interface ICloneable =)
>
> A única desvantagem disso é que você não conseguiria automatizar a clonagem
> de objetos em uma função genérica (mas também nada impede do seu aplicativo
> definir a interface ICloneable... é apenas um facilitador e nem importa
> muito para o teu caso).
>
> 2010/1/22 Lorenzi <[email protected]>
>
>> Valeu Julio obrigado pela resposta vou testar isso..
>>
>>
>> On 22 jan, 19:09, Júlio César Ködel <[email protected]> wrote:
>> > Uma coisa que vocês tem que ter noção é que o grid, ou qualquer outro
>> > componente de lista do Flex NÃO POSSUEM ITENS NEM LINHAS!
>> >
>> > Ele simplesmente apresenta os dados providos na propriedade
>> dataProvider.
>> >
>> > Portanto, o que você quer fazer é simplesmente copiar um elemento do
>> array
>> > para outra posição.
>> >
>> > Mas aí temos as pegadinhas. Rá! =)
>> >
>> > Arrays, por padrão, são imutáveis, ou seja, não é nada bom adicionar
>> itens
>> > neles (já que eles alocam um espaço em memória com apenas um ponteiro e
>> > adicionar um item nestes caras implica, implicita ou explicitamente, em
>> > copiar todo o array antigo para uma nova localização na memória + o item
>> a
>> > ser inserido).
>> >
>> > Por isso a grande maioria das operações feitas em listas no Flex são
>> através
>> > do ArrayCollection, que são listas de dados onde novos dados podem ser
>> > adicionados mais facilmente (e há mecanismos internos para prover
>> > performance a esta operação).
>> >
>> > O grande problema é que cada item do ArrayCollection é um objeto. E o
>> que é
>> > um objeto? Apenas um inteiro apontando para uma estrutura da memória.
>> Então
>> > copiar o objeto para outra posição do array na verdade não o copia,
>> apenas
>> > copia sua referência (o que implica que uma alteração no item original
>> seja
>> > imediatamente replicada para os itens copiados já que eles são a mesma
>> > coisa, a mesma estrutura em memória).
>> >
>> > Para isso o ActionScript define uma interface para adicionar o método
>> Clone
>> > em um objeto. Cabe a você, programador, implementar o mecanismo de clone
>> na
>> > sua classe que implica, basicamente, em criar uma nova instância do tipo
>> > desejado e copiar cada uma das propriedades para esta nova instância,
>> > gerando assim uma cópia real do objeto.
>> >
>> > Então, vamos supor sua classe:
>> >
>> > public class MinhaClasse
>> > {
>> >   public var nome:String;
>> >   public var idade:int;
>> >
>> > }
>> >
>> > Ficaria assim:
>> >
>> > public class MinhaClasse
>> > {
>> >   public var nome:String;
>> >   public var idade:int;
>> >
>> >   public function clone():MinhaClasse
>> >   {
>> >     var copia:MinhaClasse = new MinhaClasse();
>> >
>> >     copia.nome = this.nome;
>> >     copia.idade = this.idade;
>> >     return copia;
>> >   }
>> >
>> > }
>> >
>> > Aí no teu grid, você poderia fazer:
>> >
>> > (grid.dataProvider as ArrayCollection).addItem(itemADuplicar.clone());
>> >
>> > E, pronto, você tem um item duplicado na sua estrutura de dados.
>> >
>> > Note, obviamente, que se sua classe tiver um atributo/propriedade que
>> seja
>> > não primitivo, você deverá clonar este elemento também, ou seja, supondo
>> que
>> > NOME seja uma classe sua composta pelos campos nome e sobrenome. Não
>> > adiantaria fazer copia.nome = this.nome porque, novamente, você estaria
>> > apenas duplicando o ponteiro. Neste caso o mesmo esquema deveria ser
>> > adotado: copia.nome = this.nome.clone();
>> >
>> > 2010/1/22 Lorenzi <[email protected]>
>> >
>> >
>> >
>> >
>> >
>> > > Boa tarde.
>> >
>> > > Seguinte minha duvida é essa tenho um  datagrid com tres colunas nome,
>> > > idade, duplicar(este sera um botao para o cara clicar) . Minha duvida
>> > > é como eu faço para clicar no duplicar e ele criar uma nova linha no
>> > > grid, copiando a linha clicada.
>> >
>> > > /*normal*/
>> > > Nome            idade      Duplicar
>> > > Marcelo           23            +
>> >
>> > > /*duplicado*/
>> > > Nome            idade      Duplicar
>> > > Marcelo           23            +
>> > > Marcelo           23            +
>> >
>> > > /*duplicado*/
>> > > Nome            idade      Duplicar
>> > > Marcelo           23            +
>> > > Marcelo           23            +
>> > > Marcelo           23            +
>> >
>> > > desta maneira.
>> >
>> > > Grato.
>> >
>> > > --
>> > > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> > > Para enviar uma mensagem, envie um e-mail para
>> [email protected]
>> > > Para sair da lista, envie um email em branco para
>> > > [email protected]
>> > > Mais opções estão disponíveis emhttp://
>> groups.google.com/group/flexdev
>> >
>> > --
>> > []
>> > Júlio César Ködel G.
>>
>> --
>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> Para enviar uma mensagem, envie um e-mail para [email protected]
>> Para sair da lista, envie um email em branco para
>> [email protected]
>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>
>
>
>
> --
> []
> Júlio César Ködel G.
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a