`
madfroghe
  • 浏览: 119729 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Flex开发者应该知道的十件事

    博客分类:
  • Flex
阅读更多

Michael Portuesi发表了一篇名为Top 10 things new Flex developers should know的博文,个人认为写的比较到位(很多同类文章总有些故弄玄虚的味道)。我无意通篇翻译,只挑些只言片语总结一下,顺便加一些我自己的看法。


开始学习Flex之前
如果你了解HTML/CSS,也略懂JavaScript,但从没接触过Flex和ActionScript,那你真的应该先去了解一些面向对象的知识,因为ActionScript3是一门纯粹的面向对象语言,Flex则是一个面向对象框架。

1. 事情经常是“异步”发生的

什么是“异步”?恩,就是说当你执行了一行代码,你不能假设这行代码会立刻起到实际的作用。Flex是一个充满着异步机制的框架。这不仅仅意味着你在使用WebService这样的组件时是异步的,甚至连为DataGrid这样的控件设置DataProvider也是异步的。

[Jinni] Flex中的很多异步取决于在Flex组件生命周期中非常重要的一种“推迟”技术,即把所有的更新推迟到每次渲染前进行。

2. 分清Flex组件的属性和样式

Flex组件既有属性,也有样式。你需要了解这两者的区别。因为在ActionScript中设置组件和样式的方法是不同的。

[Jinni] 在MXML中你可能看不出属性和样式的区别,这时候最好的办法就是查API手册。

3. CSS的样式和HTML不完全一样

虽然标准CSS使用连字符(例如text-font)格式来定义样式名称,但是Flex使用驼峰式的命名格式(例如textFont)。一个显而易见的原因是连字符不能出现在XML的属性中,所以你不能用这样的名字作为MXML标签的属性。
当然,如果你把样式定义在外部的CSS文件中或者Style标签中,你也可以使用连字符格式的样式名。另外,Flex定义了很多HTML中不存在的CSS样式。

[Jinni] Flex 4中支持了更多的CSS Selector类型,例如id selector等等。

4. MXML和ActionScript其实是一回事,就算他们看起来很不一样

所有的MXML标签最终会被Flex编译器转化为ActionScript对象。你也可以在MXML中使用ActionScript。当你创建一个组件时,你可以选择使用ActionScript还是MXML。

[Jinni] MXML和ActionScript的关系,是Flex开发者必须要搞清楚的,如果你想洞悉其中的细节,可以使用-keep的编译参数,看看你写的MXML最终被转化成了什么样的代码。

5. Flex的代码隐藏(Code-behind)模式

MXML和ActionScript虽然通用,但是实际上有各自的职责,一般来说,MXML负责描述界面,而ActionScript用来完成功能。而代码隐藏是指MXML和ActionScript应该解耦,这样设计师可以直接修改MXML而不用接触代码,程序员则可以更好的组织和重用功能。

[Jinni] Flex 4的Spark组件架构把Code-behind模式发挥到了极致。

6. Flex的组件的生命周期

Flex定义了一个优秀的组件生命周期,负责组件的创建,运行,和销毁。同时也定义了一些“入口”,开发者可以由此来完成定制化的工作。对组件生命周期的不甚理解有可能会导致使用错误的编程模式。

[Jinni] 对Flex组件生命周期的理解也是我一直强调的必修课。在之前的一篇博文的最后我推荐了一篇文章,有兴趣可以去看看。

7. Flash Player的“跑道”模型

理解Flash Player的渲染和代码执行机制也是十分重要的。当你执行了改变界面的指令时,Flash Player并不是立刻把你要的内容显示在屏幕上,它根据一定的周期来刷新屏幕,而代码的执行则是另一回事。这和Java正相反,Java总是等待程序主动告诉它什么时候重绘屏幕。

[Jinni] Flash Player的“跑道”模型最早由Ted Patrick提出,而Sean Christmann将这个理论进一步扩展成了“切片”模型,但是我对这个模型的结论抱有很大的质疑,这个模型和我的实验结果有很大的出入,有时间我会专门来撰写文章和大家分享讨论。

8. 理解数据绑定和Watcher的工作方式

Flex提供了一种数据绑定机制,简单地说,就是将一个源属性绑定到一个目标属性上,当源属性发生变化时,目标属性也会随之变化。你不仅仅可以绑定到属性,也可以绑定到函数。甚至你可以为某个属性创建一个Watcher,当属性变化时,你会获得事件通知。

[Jinni] Flex 4支持了新的双向数据绑定语法,用法很简单,在{}前面加个@就可以,例如text=@{input.text}。

9. 数据封装与松散耦合
[Jinni] 这段很长,主要是谈一些设计模式和方法学的问题,就不过多说了。 -_-

10. 弱引用与强引用

无论你是使用任何语言开发,内存管理对都是至关重要的,否则你可能会陷入内存泄露或内存碎片的泥淖中。你可以通过这篇文章来了解如何在AS3中创建弱引用。

[Jinni] AS3的垃圾回收有两种方式,一是通过引用计数器,对所有引用数为0的对象进行回收。二是标记+清理模式,从对象树的根节点开始遍历并作标记,没有被标记的对象会被回收。后者的开销更大,但可以用来解决循环引用的问题。而弱引用就是当你为某个对象创建一个引用时,该引用不会影响引用计数器的值,因此即使你不对该引用置空,对象仍然可以被回收(只要该对象身上没有任何强引用)。在AS3中有两个地方可以使用弱引用机制,一是添加监听器时,二是使用Dictionary对象。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics