例如,在我的Flex移动的应用程序中,我有一个纵向和一个横向状态,但是在每个状态下使用不同的HGroup和VGroup来布局它们。如果我只是在这些组件上放置单击处理程序,这将是很容易的,因为我可以简单地为它们定义相同的单击侦听器,即使它们有不同的ID。但是,由于我在整个应用程序中多次在几种情况下引用所有这些组件,我如何允许它们具有相同的id,并且仅在它们处于当前视图中时才作出React?
现在它告诉我"identifier 'example_id' used more than once."
编辑:我还想说,我知道当他们不在一个组中时,你可以做一些像x.portrait=“25”y.portrait="“25”的事情,但当我把他们放在H和V组中时,我就不能这么做了。
2条答案
按热度按时间axzmvihb1#
恐怕您只能将具有id的组件放入容器中一次,并且只能基于状态设置其属性。
这将起作用(给定状态“垂直”和“水平”):
但这不会:
所以你可能需要在运行时重新布局你的UI(让Flex来布局它?)。一个解决办法--在你的组件周围放置UI组件,比如矩形等,然后根据样式打开和关闭它们,迫使你的组件位于你想要的位置。
pxy2qtax2#
正如Tomasz提到的和documentation所说的,
...文档中的所有ID属性必须是唯一的。
你的编辑指出了一个问题,试图在布局中使用显式坐标,而布局忽略了它们(VerticalLayout & HorizontalLayout)。因此,我不确定你是否真的不能像Tomasz提到的那样使用状态选择器。也许你需要更详细地解释一下为什么你不能使用状态选择器。
除了使用“id”属性获取对MXML中声明的组件的引用外,还有一种方法是使用“name”属性。通过为组件指定名称,您可以使用任何DisplayObjectContainer的getChildByName()方法来检索该组件。此方法:
返回具有指定名称的子显示对象。如果多个子显示对象具有指定名称,则该方法返回子列表中的第一个对象。
只有属于currentState一部分的已命名组件才会使用此方法返回(在假设您不会有两个处于相同状态的同名组件的情况下,此方法的效果最佳)。