2012-01-18 39 views
0

我試圖解決的基本問題是,我有一個Flex組合的Flash &,並且我有一個通用函數用於向組件添加進度微調器,無論如何。因此,如果組件是Container,我將它添加到rawChildren,否則正常添加它。Flex 3:向容器的「rawChildren」添加精靈有時會將其添加到內容子代

但是,我遇到了一個從VBox繼承的組件的問題。我叫

cont.rawChildren.addChildAt(spinner, cont.rawChildren.numChildren); 

但是,當我找到這些兒童,我的微調顯示了在cont.getChildren(),並且comp.numChildren顯然也由一個增加。而其他容器似乎可以正常工作,甚至是其他VBox控件。

我走過了Flex框架代碼,找不到任何解釋爲什麼會發生這種情況,無論是通過繼承還是定時。

有沒有人見過類似的東西,或者可以解釋爲什麼rawChildren在這種情況下可能不可預測?

謝謝。


功能:

var bcu:Number = u.numChildren; 
var bce:Number = el.numChildren; 

el.addChildAt(s, ((pos > -1)?pos : el.numChildren)); 
trace("ADD NEW SPINNER", u, el, el.numChildren, u.numChildren, bce, bcu); 

el哪裏是任一的DisplayObject或容器的rawChildren對象,u是所說的紡絲器被附於原始對象。

輸出:

ADD NEW SPINNER BlockMovePopup1734 [object ContainerRawChildrenList] 6 5 5 4 

然後:

[Fault] exception, information=TypeError: Error #1034: Type Coercion 
failed: cannot convert com.misc::[email protected] to mx.core.IUIComponent. 

輸出顯示el正確設置爲ContainerRawChildrenList(該rawChildren對象爲VBox),並且所述numChildren是現有[6,5] VS [5,4]來電。這意味着Sprite正被添加到內容子節點而不是rawChildren。

+0

你在談論哪些「內容孩子」? 你說「但是,我遇到了一個VBox繼承的組件的問題」,但是你沒有解釋VBox擴展你的類會發生什麼。 – 2012-01-18 18:45:00

+0

「內容兒童」是容器的正常兒童,不包括添加到rawChildren中的皮膚等東西。我的擴展VBox本質上只是一個彈出式/工具提示類型的東西,但對兒童沒有任何特殊之處。它最多包含4個LinkBut​​tons。 – Glenn 2012-01-18 20:08:32

回答

2

這很有趣。發現了怪癖。我認爲rawChildren.addChildAt函數可能有點bug。發現這個文本塊中的容器類:

Container assumes that content children are contiguous, and that 
    non-content children come before or after the content children. 
    In order words, Container partitions DisplayObjectContainer's 
    index range into three parts: 

    A B C D E F G H I 
    0 1 2 3 4 5 6 7 8 <- index for all children 
      0 1 2 3  <- index for content children 

    The content partition contains the content children D E F G. 
    The pre-content partition contains the non-content children 
    A B C that always stay before the content children. 
    The post-content partition contains the non-content children 
    H I that always stay after the content children. 

如果我用rawChildren.addChild它工作得很好了。在這兩種情況下,微調器都是作爲最後一個孩子添加的,但addChild能正確執行。

+0

哇,很高興知道。對於一個平臺來說,這是糟糕透頂的...難怪Flex現在對HTML5來說已經陷入了困境。 – 2012-01-19 01:11:54