Flex 数组问题!
设计一个图形类,来对应一个图形!
这个类大概的代码是:
public class ShapeModel extends ... { [bindable] private var _x:Number = 0; [bindable] private var _y:Number = 0; [bindable] private var _width:Number = 30; ... [bindable] private var _children:Array; public function set x(value:Number):void{ this._x = value; } [Bindable] public function get x():Number{ return this._x; } .... public function set children(childs:Array):void { this._children = childs; for each(var shape:ShapeModel in childs) { shape.owner = this; } } [Bindable] public function get children():Array { return this._children; } }
另外,还对模型类所对应的图形,添加一些操作动作,比如可以右键操作什么功能等。
其中,children是这个图形的子图形数组集合,包含一个或多个ShapeModel子数据,还可以一直嵌套下去。
如果代码是这样写的:
var children:Array = selShape.children; //selShape是当前选中的 . if (!children) children = []; children.push(newshape);
然后再用某个方法,把这个子children的变化反应更新到图形界面上去,比如:UpdateModelToGraphic(selShape);
添加的新图形是可以显示出来的,但是就会少了一些操作;
只有当再添加一个语句时,所添加的更新,才可以正常:
selShape.children = children;
这可以想象,跟Javascript有点相似:
var c = []; var d; d = c; d.push('abc'); //请问现在c的值是多少
就是as跟javascript在操作某些类型的数据是,对于相互赋值的两个变量,当你操作其中一个时,其实另一个也跟着发生变化,因为他们是指向同一个内存位置的。
var children:Array = selShape.children;
就表示 selShape的chidlren内存同样分配给了children,当然对children某些操作时,selShape.children 也跟着变化。
所以执行 UpdateModelToGraphic(selShape) 时,图形上就能正常更新出来。
但又为什么新增的图形的某些操作,不能正常呢? (某个情况就是新子图形无法删除!)
---
selShape.children = children; 涉及到了 子图形 .owner 的操作;
public function set children(childs:Array):void { this._children = childs; for each(var shape:ShapeModel in childs) { shape.owner = this; } }
如果没有执行这句再赋值的语句,就无法正常的删除!
分类:
Flex
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端