我正在使用受控制的ViewStack,其中所选NavigatorContent的可见性取决于用户从下拉菜单中选择的选项。
ViewStack的每个视图都有自己独立的UI元素,包括2-3个DataGrid,图表等 - 将其视为一个简单的学校应用程序,每个视图都绑定到一个课程,并显示该课程的学生表现(同时列出学生在网格中)
有时,显示数据存在问题 - 在渲染完成之前,数据已准备好填充;这会抛出一个null异常,因为尚未创建需要填充数据的UI元素。
为此,我将'creationPolicy'设置为'all'。设置此属性后,一切正常。 但肯定存在大量的性能问题: -
对此可能有什么解决办法。
这些是我想到的解决方案,并且因某种原因而无效:
因此,在创建/实例化时,我需要一种优雅的方式来显示视图(并显示某种进度或加载器)。
更新
当存在某种竞争条件时,我得到Null错误 - 当UI元素的渲染完成之前处理(将数据填充到UI组件,比如网格)完成时 - 我已经认识到为什么它发生了。最初,我将creationPolicy设置为默认值,因此每当我用来选择视图时,它都是在那时创建的;如果在创建视图元素之前返回了要填充的数据,则会出现空指针(因为我用来引用的UI元素仍然被创建,因此在该实例中为null)。 现在我被迫将creationPolicy设置为all,以便为所有视图创建UI,并从下拉列表中选择该视图时触发数据处理。
我更喜欢做的是有一种方法来按需创建UI(即使没有使用,也不是所有的UI)。
答案 0 :(得分:3)
也许您不应该让数据处理推送结果,反之亦然,一旦UI控件准备就绪,让UI从模型中提取数据?
例如,将数据驻留在绑定到DataGrids的ArrayCollections中。那样,谁首先完成并不重要。数据生成器甚至不必知道显示它的人或位置,并且只要ArrayCollection发出数据已更改的信号,UI就会显示数据。
答案 1 :(得分:1)
我建议您使用模块而不是视图堆栈。
使用模块时会创建单独的swf
文件,并且在加载应用程序时不会加载。仅当通过moduleloader.load(module)
方法调用模块文件时才会加载模块文件。