3

在创建 ViewStack 时遇到问题,在 ViewStack 中带有转发器以及其他组件(即 vBox)。中继器被放置在视图的底部。尽管中继器列在其他组件之前,但它位于底部。

有没有一种解决方法可以让我在其他组件之前绘制中继器?

我用谷歌搜索了这个,其他人在另一个网站上问了同样的问题,但没有人回答。我正在粘贴他们帖子中的示例代码。最后绘制中继器。

谢谢

这是一个例子:

<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>
4

2 回答 2

2

我相信问题出在dataProvider设置/更改值时。

这在上面的代码中没有显示,所以很难知道。但是,每当更改 this 的值时,转发器创建的现有子代将从父代中删除,并添加新的子代。

如果已经创建了 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>

在本例中,dataProvider 是在中继器初始化期间设置的,因此选项卡按顺序显示:

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

但是,如果 dataProvider 的值发生更改(或 dataProvider 调度 CollectionChangeEvent),则将删除 3 个转发器子级,并添加新的子级。这将留下标签顺序:

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

我注意到您已经将一个organizeViewStack方法连接到repeatEnd事件处理程序 - 尽管没有显示该方法的代码。

这看起来是管理这个问题的最佳方式——一旦孩子们被设置好,就重新洗牌。

于 2010-09-07T18:50:43.610 回答
0

我有点猜,但是

ViewStack 的所有子项都必须是一个容器。中继器不是容器。因此,它作为 ViewStack 子项的位置是无关紧要的,因为出于所有意图和目的,它都被忽略了。

但是,当中继器执行时,它会创建一堆容器并将它们添加到父级(AKA ViewStack);从而为它们提供与您对代码的期望不同的 Z 顺序。

您是否尝试创建许多不同的 ViewStack 子项?还是您希望“DynamicFieldEditors”以某种方式堆叠?

于 2010-09-03T14:42:06.993 回答