2010-09-02 24 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事件处理 - 虽然没有显示该方法的代码。

这看起来好像是管理这件事的最好方式 - 一旦设置完成后,重新排列子女的顺序。