【问题标题】:Using custom states in Spark item renderers在 Spark 项目渲染器中使用自定义状态
【发布时间】:2013-07-03 17:16:44
【问题描述】:

在 Flex 4 中是否允许在 Spark MXML 项目渲染器中使用状态?

我在问这个,因为已经有像这样的“内置”状态

<s:states> 
    <s:State name="normal"/> 
    <s:State name="hovered"/> 
</s:states> 

我可以添加自己的自定义状态,例如“ingame”和“inlobby”吗?

即使我在 MXML 项目渲染器中的 AS3 代码不使用/不需要它们,我是否仍应写出“正常”和“悬停”?

【问题讨论】:

    标签: apache-flex flex4 flex4.5 flex4.6 flex4.7


    【解决方案1】:

    在 Flex 4 中是否允许在 Spark MXML 项目渲染器中使用状态?

    是的!渲染器只是一个组件,就像任何其他组件一样;如果你愿意,你可以添加状态。

    我不确定 Flex 列表如何处理设置渲染器的状态。因此,您的渲染器中的状态似乎可能会从您的“自定义”状态更改为 Flex 状态之一。您可能必须覆盖 currentState 变量以防止此类更改。

    即使我在 MXML 项目渲染器中的 AS3 代码不使用/不需要它们,我是否仍应写出“正常”和“悬停”?

    不,如果您不需要它们,请不要添加它们。当发生鼠标交互(如悬停)时,ItemRenderer 最终将调用其getCurrentRendererState() 方法来决定在渲染器上设置什么状态。在那个方法中有很多这样的语句:

    if (hovered && hasState("hovered"))
        return "hovered";
    

    如果没有匹配,它将保持渲染器的状态不变。

    【讨论】:

    • 是的,这就是我所担心的:将鼠标悬停在项目上会将状态从我的自定义“游戏”更改为“悬停”...
    • 你必须试试看。如果您自己的组件没有实现“悬停”或“正常”状态,那么应该没有问题。 [我认为]
    • @AlexanderFarber 我编辑了@Reboog711(希望您不介意!)回答以解决您的其他问题。这也将使您了解它将如何干扰您自己的状态。如果您需要解决它,请覆盖 getCurrentRendererState()
    • @AlexanderFarber 当一个项目渲染器变得如此复杂时,我倾向于将它封装在一个单独的组件中,然后组合成一个 ItemRenderer。这将自定义状态留给自定义组件,将渲染器状态留给渲染器(如果需要),这对我来说似乎更干净。尽管正如 Reboog711 和 Sunil D. 指出的那样,在技术上完全可以单独在 ItemRenderer 中处理这一切。
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多