Flex 标签和 AS 类(简单版)
07月 16th, 2006 — Dreamer英文原文:《Flex tags and AS classes (the simple version)》
原文地址:http://kuwamoto.org/2006/07/14/flex-tags-and-as-classes-the-simple-version/
译文作者:Dreamer。
Flex 标签和 AS 类(简单版)
Flex最强大的特性之一就是它在标签和ActionScript类之间创建了一个简单的映射。这是一个简单的概念,但是我多次发现不懂Flex的人对这点是如何工作的或者‘它为什么有用’理解起来有困难。
对那些学习Flex的新手,这里有一些规则以及一些简单的例子让你们以此开始学习这个特性。
例子 1 —— 开始的三个规则
规则 1 —— 每个标签相当于一个以标签名为类名的类的一个实例
规则 2—— 标签的每个属性(attribute)转变为对象中的一个property
规则 3—— 每个标签中的id属性转变为相应实例中的一个变量
让我们假设你有一个象这样的类:
public class Contact
{
public var home : Location;
public var work : Location;
public var firstname : String;
public var lastname : String;
public var isFriend : Boolean = false;
}
你可以通过一个MXML文件创建它的一个实例,如下:
<Contact id=”myContact” firstname=”Susan” lastname=”Smith” isfriend=”true” />
粗略地讲,上面的MXML等价于下面的ActionScript:
var myContact : Contact = new Contact();
myContact.firstname = “Susan”;
myContact.lastname=”Smith”;
myContact.isFriend=true;
简单,对吧?注意MXML编译器知道如何处理所有的内建(built-in)类型。String仍然保持为字符串,但是Boolean则转变成真正的布尔值,而不是字符串“true”。
但是如果你的类型比较复杂该怎么办?这就是 规则 4 出现的原因。
例子2 —— 复杂类型
规则 4——(规则 1中的例外)如果一个标签不是和一个类相对应,它将会被处理成所嵌入的标签(译注:即父标签)的一个属性,并且这个标签的内容就是这个属性的值。
再看一下上面的类。它涉及了一个Location类。让我们看一下Location类是这么被定义的:
public class Location
{
public var address : String;
public var state : String;
public var zip : String;
}
我们可以使用下面的MXML来创建一个含有Location的Contact。
<Contact id=”myContact” firstname=”Henry” lastname=”Smith”>
<home>
<Location address=”555 Foo Drive” state=”CA” zip=”94131″ />
</home>
<work>
<Location address=”111 Bar St” state=”CA” zip=”94102″ />
</work>
</Contact>
粗略地讲,这个MXML等价于:
var myContact : Contact = new Contact();
myContact.firstname = “Henry”;
myContact.lastname=”Smith”;var temp: Location = new Location();
temp.address = “555 Foo Drive”;
temp.state = “CA”;
temp.zip=”94131″
myContact.home = temp;
temp = new Location();
temp.address = “111 Bar St”;
temp.state = “CA”;
temp.zip = “94102″;
myContact.work = temp;
例子 3 —— 数组
规则 5 —— 某些类定义了“默认属性”。这就是说那个属性标签(规则 4)在这些属性中可以被忽略。
规则 6 —— 数组标签几乎总是可以被忽略。
假设我们想要创建一个ContactList如同下面这样的对象(现在忽略这个metadata(元数据)):
[DefaultProperty("contacts")]
public class ContactList
{
public var contacts : Array;
}
如果没有规则 5和6,你象下面那样做(Flex1.5 这样工作):
<ContactList id=”myList”>
<contacts>
<Array>
<Contact firstname=”Henry” lastname=”Smith” />
<Contact firstname=”Susan” lastname=”Smith” />
</Array>
</contacts>
</ContactList>
因为我们已经添加了metadata来说明cantacts是默认的属性,所以我们可以使用规则 5和6来压缩上面的代码:
<ContactList id=”myList”>
<Contact firstname=”Henry” lastname=”Smith” />
<Contact firstname=”Susan” lastname=”Smith” />
</ContactList>
为什么这样做很好?
这使你可以做三件事情:
1.如果你有某些一系列标签想要往MXML中添加,这相对来说很简单。只是通过正确的属性添加相应的类就可以了。
2.反过来说,如果你已经有了类并且你发现你需要在XML中表现它们,映射已经为你做好了。
3.保持健全。在你做了这些之后,一些不可思议的事情在你脑海中发生了,你凝视MXML代码块的时候将可以“看到”你将要编写的用来传输一些属性的ActionScript代码。这使得代码变得非常容易保持灵活。当然,既然我说的是它让你脑海中发生了一些不可思议的事情,我不知道“保持健全”是否能够正确描述它……。
总之,一旦你熟悉了它的用法,MXML和ActionScript类之间的等价关系将会非常有用并且非常简单易懂。
本文链接:http://www.zhuoqun.net/html/y2006/155.html 转载请注明出处。TrackBack:http://www.zhuoqun.net/html/y2006/155.html/trackback











希望能做成象异步处理的Flash那样!
希望能做成象异步处理的Flash那样,看起来比较爽!或者教给我把文章做成Flash 的方法!QQ:249234674
to ycliang03:这篇东西是我翻译的。而且我只是翻译了几篇东西,技术垃圾的很,另外我对Flash一窍不通,能力所限,恐怕不能如你所愿,抱歉了。