文原文:Component Class 原文地址:http://weblogs.macromedia.com/pent/archives/2007/10/component_class.cfm 原文作者:Peter Ent
译者:Dreamer. 此文的翻译已经获得原作者的同意,转载请注明出处,谢谢。
组件类
我经常看到这个话题——编写组件。通过这个例子,我将告诉你如何从零开始编写一个组件。我将要写几篇文章来探讨这个主题,在最后你就可以创建自己的组件了。
我把自己选择的这个组件叫做循环选择按钮。这个组件的显示的是dataProvider 中的某条纪录和两个箭头组成的一个圆环。当你选择按钮的时候箭头就会旋转一点同时显示dataProvider 中的下一个值。你可以把它想象成一个没有下拉列表的ComboBox组件。
你可以试着点击按钮,然后你就可以看到它是如何在各个值之间循环的。
Flex框架
想要创建一个Flex组件你必须理解Flex框架。一个组件的创建需要几个阶段,而在这些阶段Flex框架将多次遍历组件的继承层次来决定布局。
举个例子,假设一个Application中有两个VBox。一个VBox中有一些Button控件而另一个中有一些Label控件。要创建这些组件,Flex框架需要首先创建Application,然后创建VBox,然后是VBox的子控件。这是一次遍历。
如果没有对任何一个VBox指定高度或者宽度,那么你可能希望VBox足够大以便能够包含所有的子控件,对吗?为了计算VBox的大小,Flex框架需要决定它的每个子控件的大小。由于Button和Label并没有明确指定大小,所以Flex框架还需要决定它们的大小。这是另一次遍历。
一旦所有的计算都完毕的时候,Flex框架需要获得组件的大小属性和它们的位置。这又是一次遍历。
如同你看到的那样,创建组件并不是一件简单的事情,但是一旦你掌握了其中的窍门,它也并不是那么地困难。
为了方便地创建组件,Flex框架调用各个组件中的特定方法。通过实现这些方法,可以简单地使你的组件很好地适应框架。
有两种创建组件的方法:扩展一个已经实现了你想要的大部分功能的既有组件,或者由所有类的父类也就是最基础的类“从零开始”创建组件。
扩展一个既有的组件是最经常用的方法,而且他是你编写一个Flex程序的时候一直在使用的方法。当你使用一个根标签<mx:Application>创建主程序文件的时候,你就创建了一个组件(扩展自Application)。而当你创建了一个根标签为其它任意组件的MXML文件的时候,也相当于创建了一个组件;不论你是通过MXML还是ActionScript进行扩展组件的。
程序初稿
我们将会以修改HBox组件开始,但是从根本上来说我们想要扩展UIComponent。使用HBox可以很好地阐述概念。 |