【问题标题】:How to have same component ID in different state (Flex Mobile Project)如何在不同状态下拥有相同的组件 ID (Flex Mobile Project)
【发布时间】:2011-04-15 08:39:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: actionscript-3 apache-flex mobile mxml


    【解决方案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 组件(如矩形等)放在组件周围,并根据样式将它们打开和关闭,强制组件位于您想要的位置。

    【讨论】:

      【解决方案2】:

      正如 Tomasz 提到的以及 documentation 所说的,

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

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

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

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

      只有作为 currentState 一部分的命名组件才会使用此方法返回(在假设您不会有两个同名的组件处于同一状态时效果最好)。

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 2021-12-27
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 2020-09-13
        • 2021-03-20
        • 1970-01-01
        • 2015-08-13
        相关资源
        最近更新 更多