zoukankan      html  css  js  c++  java
  • Flex 数组问题!

    设计一个图形类,来对应一个图形!

    这个类大概的代码是:

    public class ShapeModel extends ... {
        [bindable]
        private var _x:Number = 0;
    
        [bindable]
        private var _y:Number = 0;
    
        [bindable]
        private var _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;
            }
        }

    如果没有执行这句再赋值的语句,就无法正常的删除!

  • 相关阅读:
    数据库优化设计方案(转)
    (转)Creating a DotNetNuke® Module Using CodeSmith Tools(For DotNetNuke Version 4.4.0 or higher)
    诱人的社区DotNetNuke免费模块列表
    C#版 DotNetNuke(DNN) 4.4.0
    在Asp.net注册js
    .net关于企业Excel报表的生成
    用DNN制作的站点
    Rainbow Resource
    ASP.NET Futures
    (轉)Net中获取CPU编号
  • 原文地址:https://www.cnblogs.com/editor/p/3829731.html
Copyright © 2011-2022 走看看