1.10.在ActionScript中创建组件

1.10.1.问题
我想用ActionScript而不是MXML去创建组件。
1.10.2.解决办法
创建ActionScript文件并继承一个Flex库组件。
1.10.3.讨论
除了在MXML中创建组件为,你还可以在ActionScript中创建它们而根本不需要MXML。操作有点不同,只需要几步。首先确定你的类正确定义包名,下面的例子中,组件所在目录是以应用程序级目录开始,然后是oreilly/cookbook/,这就是包名称的意义:
package oreilly.cookbook
另一个区别是任何被包括或引入的类都必须使用全路径导入进来,这包括任何组件即将继承的类,例如这里的mx.containers.Canvas:
import mx.containers.Canvas;
import mx.controls.Text;
import mx.controls.Image;
import oreilly.cookbook.Person;
public class PersonRenderer extends Canvas
{

通常类申明后面会列出所有常量或变量。下面的例子中,类的所有私有变量都被列出。这些属性只有组件自身可以访问,其他组件都不可以。要访问这些属性,需要提供get和set方法。

Getter和Setter方法是一种常见的用于访问私有变量的方式。
private var _data:Object;
private var nameText:Text;
private var ageText:Text;
private var positionText:Text;
private var image:Image;

在ActionScript中,构造函数总是公有的,且没有返回值,名称与类名相同,例如:
public function PersonRenderer ()
{
super();

任何将被加入到组件的组件都有其构造函数,作为addChild方法的参数被加入到显示列表中,他们的属性可以被修改。
+展开
-ActionScript
nameText = new Text();
addChild(nameText);
ageText = new Text();
addChild(ageText);

下面的例子中,ageText组件进行手动定位,这是必要的,因为PersonRenderer是一个Canvas,它并不具有布局管理器,不像VBox或HBox组件。
+展开
-ActionScript
ageText.y = 20;
positionText = new Text();
addChild(positionText);
positionText.y = 40;
image = new Image();
addChild(image);
image.y = 60;
}

如果组件已经定义了方法处理数据,比如这里的mx.containers.Canvas,你必须重写这些方法来执行自定义行为。要重写则需使用override关键字指示编译器试图重写父类的方法,例如:
+展开
-ActionScript
override public function set data(value:Object):void
{
_data = value;
nameText.text = value.name;
ageText.text = String(value.age);
positionText.text = value.position;
image.source = value.image;
}
override public function get data():Object
{
return _data;
}

这是最后一个方法,很原始的方法,作用域为公开:
+展开
-ActionScript
public function retrievePerson():Person
{
/* do some special employee processing */
return null;
}
}
}
要想把这个类添加到其他组件中,可使用下面的ActionScript代码:
+展开
-ActionScript
var renderer:PersonRenderer = new PersonRenderer();
addChild(renderer);

或者在MXML中:
+展开
-XML
<renderers:PersonRenderer id="renderer"/>

在ActionScript中构造函数是显式调用。

加支付宝好友偷能量挖...


评论(0)网络
阅读(73)喜欢(0)flash/flex/fcs/AIR