Flex配列の問題!

5823 ワード

グラフィッククラスを設計して、グラフィックに対応します!
このクラスの大体のコードは:
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はこのグラフィックのサブグラフィック配列集合であり、1つ以上のShapeModelサブデータを含み、常にネストすることもできる.
コードがこのように書かれている場合:
var children:Array = selShape.children; //selShape  .
if (!children) children = [];
children.push(newshape);

それからある方法で、この子childrenの変化反応をグラフィックインタフェースに更新します.例えば、UpdateModelToGraphic(selShape);
追加した新しいグラフィックは表示できますが、操作が少なくなります.
追加された更新は、文をもう1つ追加した場合にのみ正常です.
selShape.children = children;

Javascriptと少し似ていることが想像できます.
var c = [];
var d;
d = c;
d.push('abc');
// c 

つまり、asとjavascriptがいくつかのタイプのデータを操作するのは、互いに値を割り当て合う2つの変数に対して、そのうちの1つを操作すると、同じメモリの位置を指しているため、実際にはもう1つも変化します.
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;
        }
    }

この再割り当てを実行していない文は、正常に削除できません.