20.9.1 问题我想把自定义组件上的动作或变化注册到浏览器的历史记录中,并让它们可以对浏览器的前进后退按钮进行导航。20.9.2 解决办法在Flex 中通过实现mx.managers.IHistoryManagerClient 接口来实现自定义的历史记录管理器。20.9.3 讨论为了实现此解决办法,历史记录管理器必须对你的Flex 项目/工程是激活的。为了验证,我们进入Flex Project..
20.8.1 问题我需要根据URL 参数控制Flex 3 容器内的科室内容20.8.2 解决办法使用BrowserManager 类和BrowserChangeEvents 控制可视性和跟踪可视Flex 组件的历史轨迹。20.8.3 讨论在此情形下,你是用URL 的fragment 片断来控制并跟踪Flex 应用里那些可视的容器和组件。当加载应用程序的时候,你就初始化BrowserManager 类实例,该实例可以帮助你解..
20.7.1 问题我需要从浏览器的URL 传递数据给Flex 控件,并且根据Flex 应用程序里的数据更新浏览器URL 的值,同时执行浏览器的前进或后退导航按钮。20.7.2 解决办法使用BrowserManager 类和BrowserChangeEvents 读取并写入数据到浏览器URL。20.7.3 讨论无论是通过地址栏的输入框还是还是通过使用导航控件(前进和后退按钮)来改变浏览器URL 的值,B..
20.6.1 问题我想从浏览器的当前URL 中读取并解析数据。20.6.2 解决办法使用BrowserManager 和URLUtil 类读取并解析当前页面的URL。20.6.3 讨论下面的例子展示了如何通过使用BrowserManager 和URLUtil 类读取并解析当前页URL,同时将解析结果写入一个mx:TextArea 实例中。URLUtil 类拥有可以帮助你解析当前URL 内不同片断的方法。在Flex 3中使用深..
20.5.1 问题我想让Flex 3 应用程序改变HTML 页面标题20.5.2 解决办法使用BrowserManager 类实例的setTitle 方法来改变HTML 页面标题。20.5.3 讨论Flex 3 的BrowserManager 类能够轻易地用于和包含它的HTML 页面的HTML DOM 交互。其特性之一就在于能够改变包含它的HTML 页面的标题。下面的ActionScript 代码段即可设置标题:+展开-ActionScriptpr..
20.4.1 问题我想在HTML 里调用该HTML 包含的Flex 应用程序的ActionScript 方法。20.4.2 解决办法使用ExternalInterface 在JavaScript 里设置对Flex 的回调方法并且在JavaScript 里调用ActionScript 方法。20.4.3 讨论ExternalInterface 类不仅仅封装了运行时与JavaScript 通信所需的功能,同时也包含了从JavaScript 内调用ActionScript 方法所有..
20.3.1 问题我需要在Flex 里调用JavaScript 函数。20.3.2 解决办法在AS 中使用ExternalInterface 类调用JavaScript 函数。20.3.3 讨论ExternalInterface 类封装了所有你在运行时可能使用到的与JavaScript 通信的功能。你只需要简单的使用ExternalInterface.call 方法来执行包含Flex 应用程序的HTML 页面里的JavaScript函数方法。要在ActionScrip..
20.2.1 问题我想从容器HTML 页面传递参数给Flex3 应用程序。20.2.2 解决办法使用FlashVars 直接在包含你的Flex3 SWF 的HTML 的embed标签内添加参数。20.2.3 讨论你可以在包含你的Flex 3 应用程序的HTML 内直接添加数据,并且使用FlashVars 变量在运行时轻易的读取这些数据。Flex 应用程序有两种办法可以获取这样的值。你可以仿照下面例子里面的做..
20.1.1 问题我想切换到一个独立的URL。20.1.2 解决办法使用navigateToURL 方法将浏览器切换到新URL。20.1.3 讨论navigateToURL 方法让你可以在原窗口、新建窗口或者指定的窗口框架里切换到一个新URL。这是Flex 应用和浏览器通信中最普遍的一种方式。要在你的Flex3 应用里调用navigateToURL 函数,使用下面的方法:+展开-XMLmx:Applicationxmlns:..
很多时候,我们可能发现应用程序需要和加载它的浏览器进行通信。与浏览器的通信能够让你建立一个可以超越Flex 应用本身的应用程序。你可以连接到已有的地址,通过JavaScript和其他应用程序通信,并且可以和浏览器的历史记录交互,作为开始。ExternalInterface 类让你能够调用加载Flash 应用的浏览器,获取页面信息,并且调用JavaScript 方法..
19.10.1. 问题如何将一个XML 或XMLList 对象转换成一个或多个强类型的对象。19.10.2. 解决办法通过使用限定命名空间及SimpleXMLDecoder 类把XML 译码成对象, 然后使用chemaTypeRegistry.registerClass 方法对类进行注册。19.10.3. 讨论SchemaTypeRegistry.registerClass 可以让你注册一个类型为由Web 服务所返回的类。这个类一定要在WSDL 文件被..
19.9.1. 问题当所显示的XML 包含多个内嵌子节点时, 应如何确保该层次架构会被正确地展示?19.9.2. 解决办法可以使用mx.controls.Tree 或AdvancedDataGrid 控件去显示数据。创建一个HierarchicalData对象, 并将该XML 传递给它, 以确保Tree 或AdvancedDataGrid 可以在XML 架构中正确地定位。19.9.3. 讨论要去显示下列基于Tree 或AdvancedDataGrid 控..
19.8.1. 问题如何将一个ActionScript 对象转换成XML.。19.8.2. 解决办法可以使用SimpleXMLEncoder.encodeValue 方法把一个对象及其属性写入到一个XMLDocument 对象里。19.8.3. 讨论当创建XML 以传送Web 服务或服务端方法的URL 为XML 时, SimpleXMLEncoder 对象是非常有用的。在这个对象中定义了一个名叫encodeValue 的方法, 其签名格式如下:+展开..
19.7.1. 问题如何从一个自定义的命名空间及扩展的Web 服务里, 分析其返回的XML?19.7.2. 解决办法申明一个命名空间变量, 将它设置为返回的XML 命名空间的位置, 然后在进行任XML 处理之前, 先调用该命名空间的”use”方法。19.7.3. 讨论对包含自定义命名空间的XML 进行分析是比较困难的, 它要求该命名空间一定要在任何XML 返回前被申明, 同时要在该..
19.6.1. 问题如何从一个数组中生成一个XML 对象?19.6.2. 解决方法使用数组索引去存取数组内的数据, 并由对应的数据对象创建XML 对象。然后, 调用XML的appendChild 方法把新建的节点添加到主XML 里。19.6.3. 讨论通过XML 类的appendChild 方法, 可以添加节点到XML 文档里。可是, 要将属性添加到XML 对象, 你需要使用绑定标记运算符” ({})”去填充..
19.5.1. 问题如何将一个控件跟一个E4X 查询返回值进行绑定并存放到一个XML 对象里?19.5.2. 解决方法使用绑定标记“({})”去包装E4X 表达式,并设置控件的属性。19.5.3. 讨论举例说以下的XML 文件:+展开-ActionScript[Bindable]privatevarxmlItems:XML=CATALOG>PLANTid="2">COMMON>Bloodroot/COMMON>BOTANICAL>Sanguinariacanadensis/BOTANICAL>Z..
19.4.1. 问题如何追加一个XMLList 对象到XML 对象的节点里?19.4.2. 解决方法使用E4X 表达式, 找出需要追加的XMLList 对象所在的节点, 然后在该节点上调用appendChild 方法。19.4.3. 讨论通过使用XML 类的appendChild 方法, 你可以直接添加一个XMLList 到一个XML 对象或另一个XMLList 对象里。例如说下列的XML 对象:+展开-ActionScriptvarxmlNode..
19.3.1. 问题如何通过使用正则表达式作为查询的一部分, 来创建复杂的E4X 查询?19.3.2. 解决办法以文本形式把正则表达式添加到E4X 语句中, 并调用正则表达式的test 方法。19.3.3 讨论通过结合正则表达式及E4X, 可以对XML 节点进行准确的筛选。正则表达式的文本语法允许你在不调用构造函数的情况下, 添加一个正则表达式。同时, 也可以对XML 节点的..
19.2.1 问题对于一个基于多个字段(attribute)的属性值的XML 文件, 应如何选取其中的节点?19.2.2. 解决办法使用E4X 语法的”@”运算符来存取属性, “([])运算符(数组索引)”是用来指示多个子节点之间的关系, 而”.”运算符则用来表示已命名子节点之间的关系。19.2.3. 讨论通过E4X, 你可以在子节点的名称后附加一个”.”运算符, 这样你就可以存取X..
19.1.1. 问题如何加载及处理一个外部XML 文件?19.1.2. 解决办法使用HTTPService 组件来加载XML 文件, 并把resultFormat 设置为”xml”。或者, 使用flash.net.URLLoader 类来创建一个URLLoader 实例, 并调用load 方法来加载XML 文件。19.1.3. 讨论在默认的情况下, HTTPService 组件会把任何加载的XML 转换成一个ActionScript 对象。要避免这种情况..
Flex 3 和ActionScript 3.0 支持ECMAScript 或E4X 标准的XML 语法, 使你可以通过点(.)标记来存取一个XML 分层架构的各个节点。通过E4X 所提供的简易标记, 你可以根据其名称或索引, 轻易地存取特定的节点或节点组, 而无需使用一些复杂的自定义回调函数。同时,它也定义了各种方法及属性, 用以存取XML 对象的各个部分, 包括注释, 命名空间和处理指令..
18.14.1. 问题我想创建一个服务器的连接,不需要请求就可接收XML 数据。18.14.2. 解决办法使用XMLSocket 类打开服务器连接,它允许服务器发送信息给客户端,当数据到达客户端时已经有被接收和处理的信息了。18.14.3. 讨论XMLSocket 类实现了客户端socket,让Flash Player 和AIR 应用程序可以指定IP 地址和域名即可连接到服务器。要使用XMLSocket..
18.13.1. 问题我想接收二进制数据,处理完后以同样的二进制格式发送数据。18.13.2. 解决办法使用flash.net.Socket 打开socket 连接。18.13.3. 讨论flash.net.Socket 是Flex 框架或ActionScript 3中最低级别的通信工具,使得你能建立socket连接并读取和写入原始的二进制数据。Socket 可接收和发送POP3,SMTP,IMAP 信息,甚至是自定义二进制格式。..
18.12.1. 问题我需要使用AMF 数据和安全Sockets 层(SSL)通过Flash Remoting 进行通信。18.12.2. 解决办法在编译程序所使用的services-config.xml 文件中定义你的channel 为SecureAMFChannel。18.12.3. 讨论SecureAMFChannel 可让你使用基于SSL 的AMFChannel 通信,以确保通过AMFChannel 发送的数据都是安全的。要创建一新的channel,使用安全版本..
18.11.1. 问题我需要解析返回的SOAP 响应。18.11.2. 解决办法使用Flash Player 将WebService 返回的SOAP 编码XML 的SOAP 类型转换为ActionScript 类型。18.11.3. 讨论返回的SOAP 响应可用E3X 表达式进行解析。常用的类型如表Table 18-1, 以及对应的SOAP和ActionScript 表示。Table 18-1. SOAP 类型和对应的ActionScript类型一个WSDL 文件定义如下..
18.10.1. 问题我想发送SOAP 头到WebService 组件的请求中。18.10.2. 解决办法创建一个SOAPHeader 对象,参数为所使用的名称空间和添加到header 的内容。然后调用WebService.addHeader 方法发送带有请求的header。18.10.3. 讨论Web 服务经常用SOAP 头接收登录,用户信息或其他数据。创建SOAPHeader 需要一个包含数据的限定名称空间QName 和添加到..
18.9.1. 问题我的应用程序需要与服务端的web 服务进行通信,Web 服务提供WSDL 信息表述可使用的方法和调用这些方法的具体信息。18.9.2. 解决办法创建mx.rpc.WebService 对象,设置wsdl 属性为WebService 的WSDL 地址。18.9.3. 讨论WebService 组件使用WSDL 文件与web 服务建立通信。Flash Player 能识别下列WSDL 文件的属性:binding指定客户端协..
18.8.1. 问题我需要在自己的应用程序中注册服务端数据类型,以便从RemoteObject 返回的对象能正确转换为远程类的实例。18.8.2. 解决办法使用flash.net.RegisterClass 方法或在类申明中标记类为RemoteClass。18.8.3. 讨论在反序列化AMF 数据中的对象为类对象时,该类必须事先在Flash Player 中注册,这样反序列化才能得到正确的数据类型,如下面C..
18.7.1. 问题我想在服务端数据改变能通知客户端Flex 应用程序或广播消息给所有的监听器。18.7.2. 解决办法使用mx.messaging.Producer和mx.messaging.Consumer 标签配置用于通信的目标通道和消息事件设置事件处理器。配置这些需要使用Adobe LiveCycle 或BlazeDS 服务器。18.7.3. 讨论发布/订阅模式使用两个组件:mx.messaging.Producer 和mx.mess..
18.6.1. 问题我想确定返回的数据是多个同时发生的服务中哪个调用返回的结果。18.6.2. 解决办法在每个服务中添加ASyncToken 变量标记。18.6.3. 讨论因为mx.rpc.ASyncToken 是一个动态类,可以在运行期添加属性和方法。Flex 文档里描述的是“一个为异步RPC 操作设置额外的或标记级别的数据的地方”。例如,假定有个应用程序使用DateChooser 控件,..