Flex 标签和 AS 类(简单版)

英文原文:《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

相关日志


Posted in Flex, 技术.

3条评论

  • At 2006.09.05 09:41, ycliang03 said:

    希望能做成象异步处理的Flash那样!

    • At 2006.09.05 10:02, ycliang03 said:

      希望能做成象异步处理的Flash那样,看起来比较爽!或者教给我把文章做成Flash 的方法!QQ:249234674

      • At 2006.09.05 18:51, Dreamer said:

        to ycliang03:这篇东西是我翻译的。而且我只是翻译了几篇东西,技术垃圾的很,另外我对Flash一窍不通,能力所限,恐怕不能如你所愿,抱歉了。

        (Required)
        (Required, will not be published)