Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何在Flex中克隆对象?_Apache Flex_Flash_Actionscript 3_Clone_Degrafa - Fatal编程技术网

Apache flex 如何在Flex中克隆对象?

Apache flex 如何在Flex中克隆对象?,apache-flex,flash,actionscript-3,clone,degrafa,Apache Flex,Flash,Actionscript 3,Clone,Degrafa,我想克隆一个Canvas对象,它包含一个带有多个几何图形的Degrafa曲面 我尝试过天真的方法: return ObjectUtil.copy(graph_area) as Canvas; 这导致了错误: TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1b51 to com.degrafa.geometry.Geometry. TypeError: Error #1034: Type Coerci

我想克隆一个Canvas对象,它包含一个带有多个几何图形的Degrafa曲面

我尝试过天真的方法:

return ObjectUtil.copy(graph_area) as Canvas;
这导致了错误:

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

您需要的是一个深度副本,生成一个具有原始副本相同信息的新实例

我知道的唯一方法是使用ByteArray,如下所示:

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

AS3确实缺少Object.clone()…

我认为ObjectUtil.copy不能用于克隆画布。 根据flex文档:

抄袭
此方法用于复制数据对象,例如集合的元素。它不用于复制UIComponent对象,例如TextInput控件。如果要创建特定UIComponent对象的副本,可以创建该组件的子类,并实现clone()方法或其他方法来执行复制。

我发现自己尝试了类似的方法,但似乎仍然没有复制TextArea(又称UI对象)

我也遇到了同样的问题(对于我创建的NamedEntity接口),在这里寻找答案,但只在调用registerClassAlias方法(我从中获取)时找到了答案。就这样,

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

静态方法ObjectUtil.copy()是AS3的“Object.clone()”:

复制指定的对象并 返回对副本的引用。这个 复制是使用本机 序列化技术。这意味着 自定义序列化将被删除 在复制过程中受到尊重

此方法是为复制而设计的 数据对象,例如 收集它不是为了 复制UIComponent对象,例如 文本输入控件。如果你想 创建特定UIComponent的副本 对象,则可以创建 组件并实现克隆() 方法,或执行 抄袭


如果您查看ObjectUtil.copy()的源代码,它会做完全相同的事情。是的,它使用AMF对对象进行序列化和反序列化。我在这段代码中遇到错误…错误:错误#2030:遇到文件结尾。在flash.utils::ByteArray/readObject()中,文档明确指出此函数不适用于UI对象
public static function clone(namedEntity:NamedEntity):NamedEntity {
registerClassAlias('test',ReflectionUtil.classByObject(namedEntity));
var returnObject:NamedEntity = ObjectUtil.copy(namedEntity) as NamedEntity;
}
public static function copy(value:Object):Object