1


1

addChildはどのようにして間違った挿入インデックスを選択することができますか?

そこで、Flexアプリでは、新しいGUIコンポーネントを作成して `parent.addChild()`を呼び出して追加します。 ただし、場合によっては、これによりFlexの腸にエラーが発生します。 実のところ、addChildは実際に次のことを行います。

return addChildAt(child, numChildren);

それが壊れるケースでは、どういうわけかnumChildrenは1ずつずれています。 このエラーにつながる:

_ RangeError:エラー#2006:指定されたインデックスは範囲外です。 flash.display :: DisplayObjectContainer / addChildAt()(mx.core :: Container / addChildAt())(mx.core :: Container / addChild()) 。 flash.events::EventDispatcher/dispatchEventFunction()at flash.events::EventDispatcher/dispatchEvent()at mx.core :: UIComponent / dispatchEvent()at mx.controls :: SWFLoader :: contentLoaderInfo_completeEventHandler() _

これはFlexのバグですか、それとも私の使用方法にありますか それは一種のスレッドバグかもしれないように見えますが、Flexはスレッドをサポートしていないので少し混乱します。

5 Answer


1


コンポーネントが完全に初期化される前に子を追加している可能性がありますか? Event.COMPLETEがブロードキャストされた後に子を追加してみませんか?

それはスレッドをサポートしていないかもしれませんが、それはまだ非同期です…​


1


numChildrenは、children配列内の既存のインデックスを正しく参照していません。 AS3の配列は0から始まるインデックスが付けられます。 これは、numChildrenではなく、インデックスnumChildren - 1の場合の配列の最後の項目です。

addChildAt(child、numChildren - 1)を試してください。


0


私は、それがすでに表示リストにあるUIComponentを再ペアレント化するときに最も頻繁に起こることに気付きました。 あなたはこの状況で育児していますか?


0


ドープのように、コンテナがすでに存在していてもコンテナに子を追加しようとしていたため、混乱した「間違った挿入インデックス」メッセージが表示されました。


0


比較 http://forums.devshed.com/flash-help-38/scroll-pane-scroll-bars-not-working-818174.html - あなたがする必要があるのは、表示オブジェクトに子を追加してから、表示オブジェクトになるようにスクロール区画のソースを設定することです。 このようなKinda …​

コード:

var myDisplay:DisplayObject = new DisplayObject();

myDisplay.addChild(myChild1); myDisplay.addChild(myChild2); myDisplay.addChild(myChild3); myDisplay.addChild(myChild4);

ScrollPane.source = myDisplay; ScrollPane.update();