我在一个网站中有一个MXML组件,我在几个不同的屏幕中重用它。根据用户单击的内容,该组件初始化一些值并开始播放媒体。
现在,如果我单击站点,并在屏幕1中播放媒体,组件将正常初始化并播放媒体。
如果我随后转到屏幕2并播放媒体,该组件将初始化两次。一次用于屏幕1,一次用于屏幕2。
当我转到屏幕三时,它将开始初始化三次。因此,它正在为每个屏幕创建MXML组件的新实例!!
如何确保MXML组件仅为需要初始化的屏幕进行初始化?
我真正想要的是这个组件在整个应用程序中始终只有一个实例。是否可以将该MXML组件转换为Singleton,以便在我的应用程序中始终有该MXML的一个实例?
发布于 2009-12-17 04:35:49
你为什么不把这个组件做成一个模块,然后这样使用它呢?你可以加载和/或卸载一个模块,并在你喜欢的任何地方使用它!只是把它称为一个单独的项目!而且您在应用程序中的开销要少得多。
发布于 2009-12-17 01:09:03
你能更深入地解释一下吗?你说的“屏幕”是什么意思?这听起来像是您的组件嵌套在某种视图堆栈中,并且您的屏幕在视图堆栈中是不同的部分,但在这里很难区分。
无论如何,我认为解决方案是将组件中您想要成为视图中的单例的部分抽象出来。默认情况下,ViewStack以惰性方式初始化视图堆栈中的对象,但可以使用Flex对象上的Flex属性覆盖这一点。这听起来像是您的creationPolicy正在初始化子对象,而组件代码中的某些东西导致同一对象的其他实例在创建其他实例时重新启动某些初始化代码(可能是在您的MXML实验中)。
若要真正达到所需的效果,您可能只需编写一些actionscript,以便智能地将您只想创建两次的显示对象重新设置为父对象。当我们在屏幕上讨论视图对象时,“单例”的概念就不那么有意义了--要让它显示在许多地方,你需要很多实例,并且重新为父模式的过程比单例模式稍微复杂一些,所以你需要围绕这一点做一些创造性的逻辑。
希望这能有所帮助-同样,如果你想要更具体的回应,请随时发布更多的源代码。
https://stackoverflow.com/questions/1915375
复制相似问题