2010-09-02 26 views
3

在ViewStack內部創建ViewStack時,使用中繼器和其他組件(即vBox)創建ViewStack時出現問題。中繼器放置在視圖的底部。儘管中繼器在其他組件之前被列出,但它被放置在底部。使用中繼器的Flex ViewStack - 中繼器置於底部

是否有解決方法,我可以在其他組件之前繪製中繼器?

我把這個和其他人問了同一個問題,但沒有人回答。我正在粘貼來自他們帖子的示例代碼。中繼器最後繪製。

感謝

下面是一個例子:

<mx:ViewStack id="viewStack" width="100%" height="100%" backgroundColor="#FFFFFF" 
     backgroundAlpha="1" paddingLeft="5" paddingRight="5" paddingBottom="5"> 

    <mx:Repeater id="editorsRP" dataProvider="{dynamicFields}" 
      repeatEnd="organizeViewStack();" width="100%" height="100%"> 

     <editor:DynamicFieldEditor label="{FieldGroup(editorsRP.currentItem).name}" 
       width="100%" height="100%" fields="{FieldGroup(editorsRP.currentItem).fields}" dataProvider="{details}" /> 

    </mx:Repeater> 

    <editor:NotesEditor id="notesEditor" width="100%" height="100%" label="Notes" 
     enabled="false" notesProvider="{attachment}" /> 

</mx:ViewStack> 

回答

0

我猜了一點,但

所有一個ViewStack的孩子一定是個容器。直放站不是一個容器。所以,它作爲ViewStack子項的放置是無關緊要的,因爲對於所有意圖和目的它都被忽略。

但是,當中繼器執行它時會創建一堆容器並將它們添加到父容器(AKA ViewStack)中;從而給他們一個不同於你所期望的代碼的Z-順序。

您是否試圖創建ViewStack的許多不同的孩子?或者你是否期望「DynamicFieldEditors」以某種方式堆疊?

+0

ViewStack的許多不同的孩子。爲了更清楚,我有一個tabBar和裏面,我有一個ViewStack。我創建了幾個總是存在的標籤。我正在使用中繼器基於陣列中的數據創建制表符。所以第一個標籤總是在那裏,然後我有一箇中繼器,它可以創建x個標籤,在中繼器之後,我有另一個標籤,它總是在那裏。我試圖用vbox包裝中繼器,但它只是創建一個標籤,而不是基於數組中數據的x編號。 – Dana 2010-09-03 14:50:31

+0

我認爲@Dana希望看到一堆DynamicFieldEditor容器,後面跟着一個NotesEditor - 這對我來說聽起來很公平。 – Amarghosh 2010-09-03 14:52:45

+0

這裏是一個很好的例子: 的 \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t Dana 2010-09-03 14:53:50

2

我相信問題是當dataProvider正在設置/更改它的值。

這在上面的代碼中沒有顯示,所以很難知道。但是,每當這個值被改變時,由中繼器創建的現有子節點將從父節點中移除,並且新節點將被添加。

如果ViewStack的孩子已經被創建,那麼來自中繼器的孩子將被放置在現有的孩子之後。

例如:

<mx:TabNavigator width="500"> 
     <mx:VBox label="Static 1" /> 
     <mx:Repeater dataProvider="{['a','b','c']}"> 
      <mx:VBox label="From repeater" /> 
     </mx:Repeater> 
     <mx:VBox label="Static 2" /> 
    </mx:TabNavigator> 

在這種情況下,數據提供程序是中繼器的初始化期間設置的,所以選項卡顯示在順序:

¦ Static 1 ¦ From Repeater ¦ From Repeater ¦ From Repeater ¦ Static 2 ¦ 

然而,如果該值dataProvider更改(或dataProvider分派CollectionChangeEvent),則將移除3個repeater子項,並添加新的子項。這將使Tab鍵順序:

¦ Static 1 ¦ Static 2 | From Repeater ¦ From Repeater ¦ From Repeater ¦ 

我注意到你已經連接了一個organizeViewStack方法將repeatEnd事件處理 - 雖然沒有顯示該方法的代碼。

這看起來好像是管理這件事的最好方式 - 一旦設置完成後,重新排列子女的順序。