文章标签 ‘Flex’

tn_sandbox_725290816全沙箱问题说白了是个访问资源的权限问题。只不过规则比较复杂,而且需要先理解好多概念。Adobe(或者以前的Macromedia)之所以弄这么复杂的规则,一个很重要的原因就是Flash Player客户端的安全问题。试想如果一个从网络加载的.swf既能访问网络,又能访问本地文件,就相当于在客户端安装了一个木马,还有谁会安装Flash Player。一个.swf能否成功访问某个资源,取决于很多因素,包括:

  1. 访问的资源的类型,或者说访问方式。
  2. .Swf文件的安全沙箱类型。
  3. 访问的资源所处的位置。
  4. 资源的所有者或者创建者对资源赋予的访问权限(crossDomain文件,Security.allowDomain()方法)。
  5. 用户对.swf文件赋予的权限(主要是对麦克风和摄像头的访问)。
  6. Flash Player运行.swf文件的模式。

这里主要讨论了前四个因素。首先要理解一些关键概念,包括什么是安全沙箱,资源的类型,资源的所有者,资源的创建者。理解完这些概念,也就自然会对安全沙箱有一个清晰的认识了。

安全沙箱

安全沙箱是个容易让人迷糊的概念。我第一次看到这个词,觉得是个它容器,在里面的就是安全的。其实,大多数情况下我们提到这个词,往往指的是一个.swf文件的安全沙箱类型(Security-Sandbox-Type)。说白了就是.swf文件的一个属性。就像一个Canvas对象的width属性。一般来说,.swf文件的安全沙箱类型可能是以下几种:

阅读全文…

2009年12月20日12:26 | 22 条评论

引子:作于一名由ASP.NET开发转到Flex开发的程序员,最开始适应的过程是相当愉悦和轻松的。由于我早在ASP.NET中习惯了标签式的布局和对应的code behind的编程方式,在Flex中的MXML语言只不过是MXML元素和AS3语法的重新熟悉。但是就像ASP.NET中的标记语言,MXML只不过是AS3的一种封装,归根到底它会被转化成AS3再进行编译,所以,只有了解这门语言的底层运行机制,才有可能真正成为一名优秀的Flex开发人员。由于有过ASP.NET的开发经验,我清楚地认识到像这种以XML标签为基础的组件式的开发方式,只有弄清楚组件的生命周期,才能进行高级开发,才能在遇到复杂情况时有思路去解决,就像做ASP.NET的开发要熟悉页面的生命周期一样。

为此,我刚接触Flex不久就开始研究Flex组件的生命周期。幸运的是,Flex Builder内嵌的帮助文件十分犀利,很容易就查到了Flex组件的的生命周期部分。不幸的是作为没有Flash开发经验的程序员,对里面的某些名词并不是很明白。就这样在没有Flash基础的情况下,我曾经看过很多遍帮助文件,但感觉脑子里一直不是很清楚,对整个生命周期不能形成一个完整的轮廓。最后终于滤清了一些思路,结果还是停在了一个名词上,叫做“Render Event”。里面两次提到了这个词,都是在关键的地方。前些天搞到了《Essential.ActionScript.3.0》的电子版,阅之如醍醐灌顶,不愧为AS3的经典。其中一章就专门讲了Flash运行时的屏幕更新机制,里面当然也提到了Flex帮助文件中所谓的“Render Event”。

先看看Flex帮助文件是怎么说的吧,这里拷贝了原文(可以先略过,只为提供参考):

阅读全文…

2009年12月1日21:47 | 224 条评论
标签: ,

当我们讨论Text Layout Frmaework的编辑组件时,才更能体现MVC设计模式,因为编辑组件包括了控制层的功能。编辑组件封装了处理用户与视图层交互的代码以及通过将用户动作传输给命令来修改模型层的代码。

编辑组件通过三个类实现了控制层的功能,它们可以用来选择文本,编辑文本,以及取消以前的操作。SelectionManager类定义了一些用来管理文本选择的属性和方法。EditManager类则帮助你来插入,编辑,格式化文本。UndoManager类维护一个用户最近操作的历史记录,这样就可以让用户撤销或重复以前的操作。

能否选择和编辑文本是在TextFow层控制的。每个TextFlow的实例都有一个对应的管理交互的对象(interaction manager),它实际上是TextFlow.interactionManager属性。通过将SelectionManager类的实例赋给这个属性就可以激活选择文本的功能,将EditManager类的实例赋给这个属性可以同时激活选择和编辑功能。

阅读全文…

2009年11月16日21:40 | 153 条评论
分类: Flex翻译
标签: , ,

转换组件实现了文本布局框架的导入导出功能。当你想在运行时加载文本,而不是把文本硬编码编译进SWF文件中时,或者你想将存储在TextFlow实例中的文本导出到字符串或者XML对象中时,你将用到这个组件。

导入和导出都是直接的过程。你直接调用export()方法或者importToFlow()方法。它们都是TextFilter类的静态方法。

转换组件在选择如何存储文本方面提供了很大的灵活性。里如,如果你将文本存储在数据库中,你可以直接将它们导入到框架中来显示,通过使用编辑组件来实现编辑功能,然后将编辑完的文本导出到你的数据库中。

导入文本

Text Layout Framework既可以导入普通的文本,也可以导入Text Layout Markup形式的XML。通过设置importToFlow()方法的第二个参数来设置导入的文本类型。如下面的例子所示,第三个参数被忽略了:

  1. var markup:String = "Hello World, this is plain text";
  2. var flow:TextFlow = TextFilter.importToFlow(markup, TextFilter.PLAIN_TEXT_FORMAT);

Text Layout Markup是存储在Text Layout Framework中的文本的XML格式。XML将文本流层次结构映射成XML标记,为存储的文本提供了一种很精确地表现形式。将TextFilter.TEXT_LAYOUT_FORMAT作为importToFlow()的第二个参数来导入XML文本:

  1. var markup:XML = <textflow><p><span>Hello, World</span></p></textflow>;
  2. var flow:TextFlow = TextFilter.importToFlow(markup, TextFilter.TEXT_LAYOUT_FORMAT);
导出文本

Text Layout Framework可以将文本导入为下面的三种格式:普通文本,FXG或者Text Layout Markup。调用TextFilter.export方法来导出文本。export()方法包含三个必须的参数和一个可选的参数。第一个参数是导出的TextFlow的实例。第二个参数是导出的格式:普通文本,FXG或者Text Layout Markup。第三个参数是导出文本的数据类型。你可以选择字符串或者XML。第四个也是最后一个可选的参数,允许你设置一个ImportExportConfiguration类的实例。

下面的例子展示了导入一个普通文本格式的字符串,然后将它导出为Text Layout Markup格式的XML对象:
阅读全文…

2009年11月13日22:03 | 187 条评论
分类: Flex翻译
标签: , ,

Core component(核心组件)包括 Text Layout Framework的模型层和视图层。在这个部分我们首先分析模型层的内部数据结构以及文本和文本属性是如何存储的。接下来,我们详细地介绍框架的视图层以及将文本组合进容器对象来呈现文本的 flow composer。

除了根节点,其他的节点都不是很严格的基于XHTML元素。例如,根节点只能有DivElement和ParagraphElement这两种类型的孩子结点。DivElement和ParagraphElement与XHTML元素中的<div/>和<p/>十分相似,但并非完全一样。DivElements的用途比XHTML元素中的<div/>更狭义,DivElements职能包含ParagraphElements和DivElements两种节点,而XHTML中的<div/>可以包括的元素类型要多得多。幸运的是,在导入的过程总这些区别已经被处理过了。XHTML元素中<div/>下面的文本在导入时将会被转化成拥有一个SpanElement类型节点的ParagraphElement节点,而这个SpanElement将包含这些文本。
就像DivElements,ParagraphElements也是分组元素,它不能直接包含文本或者图形。但是ParagraphElements区可以包含可以直接包含文本的四种元素类型:
SpanElement类表示一组样式一样的文本。
InLineGraphicElement类表示在文本行中可以像字符一样处理的图形元素。
LinkElement类表示超本本链接,类似XHTML中的<a/>。链接可以包括一个或多个SpanElement,InLineGraphicElement或者TCYElement。
TCYElement类表示与其他文本方向垂直的文本块,通常是一小块横向文本嵌入到大的纵向文本中去。例如,在纵向文本中你想用一个TCYElement来表示一个小数。一个TCYElement可以包含一个或多个SpanElement。
下面的图展示的核心组件的层次结构。理解了这些是用该框架成功编程的一个重要基础。
文本层次:图片
理解了核心组件模型(core component model)的结构对处理Text Layout Framework的标签也是有帮助的,标签是文本的一种XML呈现方式,同样也是Text Layout Framework的一部分。尽管该框架也支持其他的XML格式,但是框架标签是基于文本层次结构的。如果你从一个使用这种标签格式的TextFlow中导出XML,导出的XML将完全吻合改层次结构。
你应该意识到一旦你开始使用这些定义层次节点的类来编写程序,你将会遇到另外将这些类关联到一个其他类的层次结构。如果你熟悉面向对象编程的话,你会发现这是一个继承的层次结构。在这一章提到的类,都直接或间接的继承自一个叫FlowElement的类。这个继承的层次结构与模型的文本层次结构是正交的。这两个交叉的层次结构某些时候会引起一些小困惑,但实际上它们是完全相互独立的。
样式和流元素(FlowElement)
你可以将样式赋给文本流层次树中的流元素,不论是TextFlow的实例还是它的叶子节点(SpanElements, InlineGraphicElements, LinkElements, and TCYElements)。根据上下文的不同,你可以赋值的样式类型也有区别。例如,像缩进或外边距这样的样式你只能适用于段落,而像字体大小这样的样式则适用于单个的字符,段落,甚至整个文本流。为了使用上的方便,我们将样式分为三类:容器,段落,字符。
容器类样式专门适用于整个的容器或文本。容器将在下一部分讨论,但是现在你可以简单的将容器认为是一个文本的holder(持有者?)。容器可以设置内边距,列属性,断行,垂直对齐这样的属性。只有FlexFlow,DivElement以及实现了IContainerController接口的类可以使用容器类的属性。所有的容器类属性都被打包进了ContainerFormat这个类中。有两个方式使用容器类的样式,如果你有许多想一次赋值的样式,你可以使用ContainerFormat类建立一个包括所有这些样式的样式对象。然后就可以将这个样式对象赋值给任何一个TextFlow,DivElement或者IControllerObject的实例。或者,你看你可以在这些对象上单独赋值。这三个类(接口)有一组可以直接复制的只读的样式属性。
段落样式是在整个段落上使用的样式,并不适用于单独的字符。例如段落样式包括对齐,外边距,tab stops(制表符?)等。你只能在ParagrphElement,DivElement以及TextFlow类的实例上使用段落样式属性。就像容器有一个ContainerFormat类,段落也有一个ParagraphFormat类来作为段落的样式类。你可以将ParagraphFormat类的实例赋值给任何 ParagraphElement, DivElement, 或者TextFlow的实例。同样你也可以单独赋值。
字符样式可以适用于一个或一段字符的样式。字符样式包括字体大小,字符颜色,tracking(锚定位?),字间距以及行间距等。从CharacoerFormat类中可以找到所有字符样式的列表。你可以在任何文本流元素,这样就可以轻易地在整个段落上或文本流中应用字符样式。字符样式同样可以像段落样式那样使用两种方式使用。你既可以创建一个CharacterFormat对象或者单独将样式属性直接赋值给FlowElement的那些只读的对应的属性。
容器,段落和字符样式都会从文本流层次体系继承而保持一致。如果你将一个ContainerFormat的对象赋值给整个文本流,则该文本流中的每个DisplayObjectContainerController都会继承这个对象中的那些样式值。例如你在文本流层上设置了内边距属性的值,这个设置将应用于这个文本流中的所有容器。但是你也可以通过给一个指定的容器应用一个新的样式对象来在该容器中覆盖这些样式属性。
如果你将一个ParagraphFormat对象应用在整个文本流,则该文本流下的每个段落都会继承这个ParagraphFormat对象的样式。例如,你将左边距和右边距属性赋值给了整个文本流,则它下面的每个段落都会继承这些样式。但是你可能说如果某一个段落是一个引用块,想和其他的段落应用不同的样式,该怎么办。幸运的是继承的属性可以通过将一个不同的ParagraphFormat对象赋值给指定的段落而被轻易地覆盖
1. 文本流的层次体系

模型层用一个分层的树来表示文本。树中的每个节点都是elements包中某一个类的实例。例如,树的根节点肯定是TextFlow类的一个实例。TextFlow类代表一个完整的文本段(an entire story of text)。story这个词来自于PageMaker和InDesign这样的排版软件,它指的是可以作为一个整体来处理的一组文本或文本流,即使这个文本流需要多列或者多个文本容器来显示。

除了根节点之外,剩下的节点都不是很严格的基于XHTML元素。例如,根节点只能有DivElement和ParagraphElement这两种类型的孩子结点。DivElement和ParagraphElement与XHTML元素中的<div/>和<p/>十分相似,但并非完全一样。DivElements的用途比XHTML元素中的<div/>更狭义,DivElements只能包含ParagraphElements和DivElements两种节点,而XHTML中的<div/>可以包括的元素类型要多得多。幸运的是,在导入的过程总这些区别已经被处理过了。XHTML元素中<div/>中的文本在导入时将会被转化成拥有一个SpanElement类型节点的ParagraphElement节点,而这个SpanElement将包含这些文本。

就像DivElements,ParagraphElements也是分组元素,它不能直接包含文本或者图形。但是ParagraphElements却可以包含可以直接包含文本的四种元素类型:

  • SpanElement类表示一组样式一样的文本。
  • InLineGraphicElement类表示在文本行中可以像字符一样处理的图形元素。
  • LinkElement类表示超本本链接,类似XHTML中的<a/>。链接可以包括一个或多个SpanElement。
  • InLineGraphicElement或者TCYElement。TCYElement类表示与其他文本方向垂直的文本块,通常是一小块横向文本嵌入到大的纵向文本中去。例如,在纵向文本中你想用一个TCYElement来表示一个小数。一个TCYElement可以包含一个或多个SpanElement。

下面的图展示的核心组件的层次结构。理解了这些是用该框架成功编程的一个重要基础。

阅读全文…

2009年11月10日21:01 | 13 条评论
分类: Flex翻译
标签: , ,

1. Text Layout Framework的结构

Text Layout Framework 包括三个分离的组件
•textLayout_core.swc
•textLayout_conversion.swc
•textLayout_edit.swc
textLayout_core组件 (hereinafter the “core component”) 是框架的核心组件,它处理文本的存储,文本容器的建立以及文本的显示。离开了textLayout_core你将无法使用Text Layout Framework。这个组件就顺理成章的包括着组成该框架的主要代码。
textLayout_conversion组件(hereinafter the “conversion component”) 是用来将文本导入和导出框架的。如果你想使用没有直接编译进SWF文件的文本,这个组件是必须的。
textLayout_edit组件 (hereinafter the “edit component”) 是用来编辑存储在core component中文本的组件。如果你想使用文本的编辑和选择功能,这个组件是必须的。
所有组成框架的类都在flashx.textLayout包下。例如,处理文本存储的类在flashx.textLayout.containers包下。flashx.textLayout一共有10个子包,随着你逐渐了解Text Layout Framework的结构,你将越来越多的感受到它们的意义。

Text Layout Framework 包括三个分离的组件

  • textLayout_core.swc
  • textLayout_conversion.swc
  • textLayout_edit.swc

textLayout_core组件 (hereinafter the “core component”) 是框架的核心组件,它处理文本的存储,文本容器的建立以及文本的显示。离开了textLayout_core你将无法使用Text Layout Framework。这个组件就顺理成章的包括着组成该框架的主要代码。

textLayout_conversion组件(hereinafter the “conversion component”) 是用来将文本导入和导出框架的。如果你想使用没有直接编译进SWF文件的文本,这个组件是必须的。

textLayout_edit组件 (hereinafter the “edit component”) 是用来编辑存储在core component中文本的组件。如果你想使用文本的编辑和选择功能,这个组件是必须的。

所有组成框架的类都在flashx.textLayout包下。例如,处理文本存储的类在flashx.textLayout.containers包下。flashx.textLayout一共有10个子包,随着你逐渐了解Text Layout Framework的结构,你将越来越多的感受到它们的意义。

2. Text Layout Framework的架构

理解Model-View-Controller (MVC)设计模式将帮助你更好的理解Text Layout Framework的架构。虽然Text Layout Framework并没有严格的遵守MVC设计模式,但它和MVC如此地接近,以至于理解了MVC将很容易地理解Text Layout Framework的架构。

MVC设计模式主张将代码按功能分离成三个不同的模块。第一个模块是模型层,不仅包括原始数据,而且包括访问数据的规则。第二个模块是视图层,处理数据的呈现。第三个模块是控制层,处理用户和视图之间的交互,把用户的行为(如选择或者编辑内容),传送到命令中来盖面模型层中的数据。通常在一个框架中只有一个模型,但是可以有很多视图和控制器。

Text Layout Framework的模型层主要定义在elements包中,包括存储文本的数据结构的类和接口。conversion类同样可以认为是模型层的一部分,它包含将数据导入和导出的规则。

Text Layout Framework的视图层包括三个包,它们使Flash Player呈现文本变得很简单。factory包提供了显示静态文本的简单方式。container包含了定义显示动态文本容器的类和接口。compose包定义了在容器中定位和显示动态文本的技术。

Text Layout Framework的控制层包含了两个处理用户与模型层交互的包。edit和operations包定义了用来编辑模型中文本的类。

2009年11月9日19:25 | 776 条评论
分类: Flex翻译
标签: , ,
尽管TextField很好用,而且占用内存很少,在flash player 10 中用它来显示少量静态文本是一个不错的选择,但是web设计师们十分渴望一个更加高级的排版控件,因此我们选择了Text Layout Framework。
Text Layout Framework是一组支持复杂文字和高级排版方式的Actionscript 3库,其布局特性在TextField类中是没有的的。

1. 支持复杂文字

尽管TextField很好用,而且占用内存很少,在flash player 10 中用它来显示少量静态文本是一个不错的选择,但是web设计师们十分渴望一个更加高级的排版控件,因此我们选择了Text Layout Framework。

Text Layout Framework是一组支持复杂文字和高级排版方式的Actionscript 3库,其布局特性在TextField类中是没有的的。

复杂文字的支持不仅包括从左到右显示和编辑文字的能力,而且要支持从左到右和从右到左的混合排版文字,例如阿拉伯文和希伯来文。该框架不仅支持中文,日文,韩文的垂文本布局,同样支持tate-chu-yoko(TCY Elements),即将横向文字块嵌入到垂直的文本流中。

目前支持以下文字:

  • 拉丁文(英语、西班牙语、法语、越南语)
  • 希腊文、西里尔文、亚美尼亚、格鲁吉亚语、埃塞俄比亚语
  • 阿拉伯语、希伯来语
  • 中文、日文和韩文
  • 孟加拉语、果鲁穆奇语、马拉雅拉姆语、泰卢固语、泰米尔语、古吉拉特语、奥里亚语、卡纳达语、藏语
  • Tifinagh, Yi, Cherokee, Canadian Syllabics, Deseret, Shavian, Vai, Tagalog, Hanunoo, Buhid, Tagbanwa

2. 高级排版和布局功能

高级排版的支持和布局特性包括:

  • 高级的文本样式:连字(印刷), typographic case, digit case, and digit width;
  • 高级的文本布局控制:字间距,锚定位(tracking),行间距,上标(superscript),下标(subscript),基线移位;
  • 多列文字,每一列作为一个文本容器;
  • 两个挨着的文本容器支持文本连续的选择;
  • inline的图形,嵌入到文本流中被当做文本一样处理(这个是图文混排的基础);
  • Support for tabs

详细的描述和例子,请到这里Text Layout Component for Flash CS4 Professional Overview

3. 需要Flash Player 10的支持

Text Layout Framework需要Flash Player10或者更新的版本,因为它是基于Flash player 10的新文本引擎(FTE)。FTE用过flash.text.engine包访问,这个包是Flash Player 10 API的一部分。Flash Player API,提供了对文本引擎底层的访问能力,这意味着一些任务需要大量的代买。当一个API提供如此底层的访问时,它通常会提供一个像Text Layout Framework这样的高层框架,来封装一些简单的API,这同样也提供了一个合适的框架,将FIE底层的API的基本功能组织成一个比较简单适用的系统。和FTE不同的是,Text Layout Framework没有被build进Flash Player。而且,他是一个用Actionscript 3.0写的独立的组件,在Flash CS 4和Flex Gumbo中同样适用。尽管它是设计成灾Flash CS4和Flex Gumbo中使用的,但它并不依赖于它们。例如,如果你在使用Flash CS 4,你有两种方法是用Text Layout Framework.。如果你喜欢拖拽text组件到舞台上,你可以使用新的Flash CS4 TextLayout组件,他是基于Text Layout Framework专门用Flash CS4的。需要澄清的是,TextLayout组件是专用于Flash CS4,是基于Text Layout Framework但并不是它的一部分。如果你喜欢在代码中用as3直接使用Text Layout Framework,你同样可以,只要你确定Text Layout Framework的库文件在正确的路径下。如果你使用Flex Gumbo,你同样有两个选择。你既可以使用基于Text Layout Framework的FxTextArea组件,或者直接在代码中使用Text Layout Framework。另外,由于Flex 3.2已经支持Flash Palyer 10,你可以在Flex 3.2中直接使用Text Layout Framework。

英文原文地址:http://download.macromedia.com/pub/labs/textlayout/textlayout_framework_overview.pdf

2009年11月8日18:50 | 1,728 条评论
分类: Flex翻译
标签: , , ,

作为一名Flex产品经理,我经常和人们谈起即将发布的Flex 4,包括我的顾客和我的项目组。这个版本比以往任何一个版本都令人激动。我们即将发布两个针对Flex的beta版的工具:Adobe Flash Catalyst 和 Adobe Flash Builder 4;它们的基础都是Flex 4 SDK。这篇文章提供了一个关于新的SDK和框架的概览。请记住这是一个beta版本,功能可能会改变,文档也会过期,而且会有bug。请follow开源Flex SDK网站上的流程,在bug系统中跟踪bug,在我们的论坛上给我们提供您的反馈。

你可能对Tim Buntel的 What’s new in Flash Builder 4 beta,Joan Lafferty的Differences between Flex 3 SDK and Flex 4 SDK beta比较兴趣。

Flex SDK上的工作主要侧重一下三个方面:

  • Design in Mind: providing a framework that supports a new degree of expressiveness, easily enabled with tools。
  • 开发者效率:提高编译器效率,增强提高生产率的语言特性,如数据绑定。
  • 框架进化:充分利用新版本的flash player的功能的优势,添加普遍需求的特性。

阅读全文…

2009年11月1日20:29 | 17 条评论
分类: Flex翻译
标签: ,
Դ