valores otro objeto guia copiar clonar flex flash actionscript-3 clone degrafa

otro - flexbox guia



Cómo clonar un objeto en Flex? (5)

No creo que ObjectUtil.copy funcione para clonar un lienzo. De acuerdo con el documento flex:

Copiar Este método está diseñado para copiar objetos de datos, como elementos de una colección. No está destinado a copiar un objeto UIComponent, como un control TextInput. Si desea crear copias de objetos UIComponent específicos, puede crear una subclase del componente e implementar un método clone () u otro método para realizar la copia.

Quiero clonar un objeto Canvas, que contiene una superficie Degrafa con varias formas de geometría.

Probé el enfoque ingenuo:

return ObjectUtil.copy(graph_area) as Canvas;

que resultó en errores:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1b51 to com.degrafa.geometry.Geometry. TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1039 to com.degrafa.geometry.Geometry. TypeError: Error #1009: Cannot access a property or method of a null object reference. at mx.core::Container/addChildAt()[C:/autobuild/3.2.0/frameworks/projects/framework/src/mx/core/Container.as:2196] at mx.core::Container/addChild()[C:/autobuild/3.2.0/frameworks/projects/framework/src/mx/core/Container.as:2140] ...


Me encontré a mí mismo intentando algo más así. Por desgracia, todavía no parece copiar un TextArea (también conocido como UI Object) ...

public function duplicateObject(sourceObject:*, targetObject:*):void { var buffer:ByteArray = new ByteArray(); buffer.writeObject(sourceObject); buffer.position = 0; targetObject = buffer.readObject(); }


ObjectUtil

El método estático ObjectUtil.copy () es "Object.clone ()" de AS3:

public static function copy(value:Object):Object

Copia el objeto especificado y devuelve una referencia a la copia. La copia se realiza utilizando una técnica de serialización nativa. Esto significa que se respetará la serialización personalizada durante la copia.

Este método está diseñado para copiar objetos de datos, como elementos de una colección. No está destinado a copiar un objeto UIComponent, como un control TextInput. Si desea crear copias de objetos UIComponent específicos, puede crear una subclase del componente e implementar un método clone () u otro método para realizar la copia.


Lo que quiere se llama una copia profunda, genera una nueva instancia con la misma información del original.

La única forma en que sé cómo hacerlo es usando ByteArray de la siguiente manera:

private function clone(source:Object):* { var buffer:ByteArray = new ByteArray(); buffer.writeObject(source); buffer.position = 0; return buffer.readObject(); }

AS3 realmente no tiene Object.clone () ...


Tengo el mismo problema (para una interfaz NamedEntity que he creado), busqué la respuesta aquí, pero solo funcionó haciendo una llamada al método registerClassAlias ​​(que tomé de http://richapps.de/?p=34 ) . Así:

public static function clone(namedEntity:NamedEntity):NamedEntity { registerClassAlias(''test'',ReflectionUtil.classByObject(namedEntity)); var returnObject:NamedEntity = ObjectUtil.copy(namedEntity) as NamedEntity; }