如何在不同的状态下拥有相同的组件ID(Flex Mobile Project)

时间:2011-04-15 08:39:14

标签: actionscript-3 flex mobile mxml

例如,在我的flex移动应用程序中,我有一个肖像和一个横向状态。两者都具有相同的组件,但它们在每个状态下使用不同的HGroups和VGroup进行布局。如果我只是在这些组件上放置点击处理程序,那将很容易,因为我可以简单地为它们定义相同的点击监听器,即使它们具有不同的ID。但是,由于我在整个应用程序中多次在多种情况下引用所有这些组件,我如何允许它们具有相同的id,并且只有在它们处于当前视图中时才会做出反应?

现在它告诉我"identifier 'example_id' used more than once."

编辑:也只是想说我知道当他们不在一个小组中时,你可以做一些像x.portrait =“25”y.portrait =“”25“但是当我有他们的时候H和V组阻止我这样做。

2 个答案:

答案 0 :(得分:1)

我担心,您只能在容器中放置一个id只有一次的组件,并且只根据状态设置其属性。

这将起作用(给定状态“垂直”和“水平”):

<s:Group id="test" width="100%" height="100%" visible.vertical="true" visible.horizontal="false"/>

但这不会:

<s:Group id="test" width="100%" height="100%" includeIn="vertical"/>
<s:Group id="test" width="100%" height="100%" includeIn="horizontal"/>

因此,您可能需要在运行时重新布局您的UI(让它由Flex?进行布局)。一种解决方法 - 将UI组件(如矩形等)放在组件周围,然后根据样式强制打开和关闭它们,使其成为您希望它们所在的位置。

答案 1 :(得分:1)

正如Tomasz所提到的那样documentation州,

  

...所有id属性必须是唯一的   在文件中。

您的编辑表示尝试在忽略它们的布局中使用显式坐标时遇到问题(VerticalLayout&amp; Horizo​​ntalLayout)。因此,我不确定你是否真的不能像Tomasz那样使用状态选择器。也许您需要更详细地解释为什么使用状态选择器不适合您。

使用'id'属性获取对MXML中声明的组件的引用的替代方法是使用'name'属性。为组件指定名称允许您使用任何DisplayObjectContainer的getChildByName()方法检索它。这个方法:

  

返回子显示对象   存在具有指定名称。如果   更多的是一个子显示对象   指定的名称,方法返回   子列表中的第一个对象。

只有使用此方法返回作为currentState一部分的命名组件(假设您在同一状态下不会有两个具有相同名称的组件,则效果最佳)。