我对当前项目(将在 Flash Player 中运行的 Flex 应用程序)有一个要求,即在表单上显示组件的任意子集,同时根据应用程序状态的某些方面隐藏所有其他组件。大约有十几个不同的文本框和下拉菜单,但有些根据之前输入的用户数据变得无关紧要,当我们进入这个特定的表单时,我们不想显示这些文本框和下拉菜单。每次显示此表单时,我可能需要显示这些组件的多种排列中的任何一种。

我正在尝试确定解决这个问题的最佳方法是什么。我是否应该创建一个画布(或其他容器),其中包含所有需要的控件,然后在我不需要的控件上设置visible = false?那么问题就变成了确保布局看起来不错。我不希望隐藏控件所在的位置出现间隙。

我考虑过的另一个选择是拥有一种可以动态实例化 TextInput 或 CheckBox 等的机制。组件,然后调用container.addChild(control)来构建组件,而不必担心间隙问题。

这似乎是一个在 Flex 中有惯用解决方案的问题,但我不知道它是什么。这些想法看起来都不是很好,所以我想知道是否还有其他人有更好的想法。

有帮助吗?

解决方案

我不知道这是不是一个好的解决方案,但当我处于完全相同的情况时,我基本上做了第一种方法。设置 visible = false 并设置 includeInLayout = false 以防止这些“间隙”。你在说什么这是一个非常简单的解决方案,非常容易和快速实现......也许其他人知道更具惯用性的东西。

其他提示

最佳实践方法是使用状态。例如:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

然后在你的代码中,你调用this.currentState =&quot; State1&quot;启用第一个状态等。使用状态,您可以有选择地显示和隐藏组件。

我建议使用google搜索flex状态教程并尝试一些以正确理解状态如何工作。

如果状态不起作用,请查看解释组件生命周期的文章。

如果您创建一个扩展 Flex 组件(如 Canvas)的类,您将在重写 createChildren 的函数中定义所有组件。您将在另一个覆盖 updateDisplayList 的函数中重新访问布局

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top