さて、表題の件、かなりあれこれ迷った挙句、根本的にここらへんの仕組みを理解していなかったので、整理を含めて書いてみる。
まず、データが階層構造で存在している。(JSON)
これを、Objectに変換する。
これが、表示・編集する元データとなる。
しかし、これを表示するとなると、DisplayObjectにしなきゃいけない。
よって、それを包括したクラスを作成した。
こんな感じ。※実際にはこれをさらに派生させる。
public class spBase extends UIComponent{ 。。。 public var obj:Object; // データの参照が入るよ。 。。。 //実際には、このインスタンスに、以下のように設定 xxx.obj = maindata.a[0].b.c;要するに、
"maindata":{ "a":[ { "b":{ "c":{ "dat1":1, "dat2":2, "dat3":3 }, "c2":{ "cat1":1, "cat2":2, "cat3":3 } } } ] }って感じで。
で、何がやりたいかというと、xxxインスタンスを削除し、maindata.a[0].b.c;を無きものにしたいのだ。
xxxインスタンス自体は、xxx.parent.removeChildAt(zz);
で消せる。しかし、そんなことをやっても、maindata.a[0].b.cは、生きてる。
ここから、悪戦苦闘が始まるのだ。
テスト開始
item:Object = new Object; item.obj = mainData.a[0].b.c;で、デバッガで見た状況。
たしかに同じアドレスをさしている。
もちろん、
item.obj = {};
なんて書けば、こうなる。まぁ当然である。
でも、
trace(delete item.obj);
と書くと、こうなる。
【その1】
でも、
trace(delete mainData.a[0].b.c);
と書くと、こうなる。
【その2】
問題なのは、traceしてみると、両方ともtrueを返すことだ。
その1はいいのだが(いや、厳密には良くない気がするが。)、、、その2は、明らかに他が参照しているので、falseが返されるべきなんじゃ。。。。。
まぁどっちにしても、両方実行しないと消せないのである。
ってことは、、、参照だけもってても消せないのである。
ってことは、、、やりたいと思うことが、、できないわけである。
0 件のコメント:
コメントを投稿