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
