2011-10-04 39 views
0

使用Oracle,BlazeDS,Java的Im & Flex。我有一个包含来自小型数据库表的数据的ArrayCollection。这张表格不会有太多变化。我想要使​​用此ArrayCollection横跨不同的mxml文件来填充组合框等Flex:可访问所有.mxml文件的变量

问的原因是,每次填充ComboBox等进行数据库调用很慢,似乎没有必要。我在“main”.mxml文件中试过一次,但是这个变量在我需要的时候无法访问。

完成此任务的最佳方法是什么?通过.mxml文件创建变量的最佳方式是什么? :)

+0

@All谢谢你所有的优秀答案:)我用Singleton的方式去了,但如果需要的话,会检查出荷兰芹! – Sebastian

+0

这将为时已晚。如果没有重写,你就会陷入混乱。 –

回答

3
[Bindable] public static var yourArrayCollection:ArrayCollection 
的静态成员

这应该使它在任何地方都可见,但使用静态变量通常不是一个好主意。

你也可以实现一个单例实例来持久化一个变量,如果你不想让它变成静态的并且需要引用其他函数等 - 但我认为静态变量应该可以。

+0

静态和Singleton之间没有dyfference,因为提供全局访问的getter是静态的。 http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons –

1

你可以只让某个类的其公开成员和导入类在所有基于MXML类:

public class DBWrapper { 
    [Bindable] 
    public var ItemList:ArrayCollection; 
} 
+1

你将不得不实例化DBWrapper来访问ItemList,不是吗?这可以通过静态变量来避免。 – LoremIpsum

+0

没错,完全忘了'static'关键字。 – alxx

3

如果这是一个较大的应用程序,我建议你看香菜:http://www.spicefactory.org/parsley/ 。使用Parsley,您可以将数组集合添加到上下文,并只需要在需要引用时添加它。数组集合应该在应用程序启动时填充并可根据需要进行更新。

1

我通常使它成为一个Globals类

public class Globals { 
    [Bindable] public var iCollection:ArrayCollection; 
} 

它可以从任何地方的程序(前提是您第一次分配的一个有效的ArrayCollection吧)访问

combobox.dataProvider=Globals.iCollection; 
2

基本上有两种方法。单例方式和静态类方式。例如,单例是一种仅通过此处描述的机制立刻执行的类。静态类与普通类有点不同:首先,你不会立即使用它。

有关如何在ActionScript 3中实现单例的更多信息:here

有关静态类和变量的更多信息:here