Flex通信篇——Flex和外部进行异步通信
ExternalInterface.call的问题
请留意以下情景,要利用外部应用程序弹出文件选择窗体,并返回所选的文件路径。
使用ExternalInterface.call来实现,当用户60秒(Flex已经设置最长的等待时间)内未能够完成文件选择会弹出"1502"的错误,严重影响用户体现。
所以,一些比较耗时的操作(超过60s),或无法确定何时调用完成的方法(如上述),应该使用异步调用的方式,当方法执行完成后进行回调。
<![CDATA[
实现异步调用机制
Flex端
定义一个Dictionary,用来缓存回调的方法
private
var m_AsyncDict:Dictionary;
定义OpenFileDialogAsync方法,用fscommand来实现,fscommand是单向的调用,不存在60秒超时的问题。
//弹出打开文件窗口,选择单个文件
public
function OpenFileDialogAsync(title:String = "请选择1个文件", initFolder:String = "", filter:String = "", callbackString:Function = null):void
{
//创建异步ID
var id:String = mx.utils.UIDUtil.createUID();
//创建自定义异步请求
var request:String = "<args>";
request += "<arg>" + id + "</arg>";
request += "<arg>" + title + "</arg>";
request += "<arg>" + initFolder + "</arg>";
request += "<arg>" + filter + "</arg>";
request += "</args>";
//缓存回调方法
if (callbackString != null)
m_AsyncDict[id] = callbackString;
flash.system.fscommand(FLASH_TO_APP_OPEN_FILE_DIALOG_ASYNC, request);
}
定义并注册AsyncCallback和CancelAsyncCall方法,让外部应用程序能够响应异步回调或取消异步回调。
public
function AsyncCallback(id:String, value:Object):void
{
if (m_AsyncDict[id])
{
//执行回调方法
相关文档:
由于Flex只是一种客户端技术其本身并不能直接同数据库交互,在实际的应用开发过程中Flex提供了如URLRequest、HTTPService、RemoteObject、WebService等类以实现同服务器的通讯和数据交互,下面做一些介绍和实例解析:
1、使用URLRequest向服务器发送请求,使用URLLoader接收服务器返回的数据:
& ......
Ctrl-F11: 执行(Run)
F11: 除错(Debug)
Ctrl-Alt-Down: 重复目前所在编辑列(Repeat current line )
Alt-Up: 移动本列,或选择列往上移动(Move line (or selection) up )
Alt-Down: 移动本列,或选择列下往移动(Move line (or selection) down )
Ctrl-Click: 移至定义区(Go to definition (also F3) ) ......
问个问题 最近在学习Flex。。。照着网上资料,在MyEclipse中完成了Flex与web项目整合
在做普通Flex运行测试是是没有问题的,但如果想调用java类,按照网上的做法,是要更改该目
录下的remoting-config.xml,但是我自动生成的WebRoot/WEB_INFO/flex目录下面仅仅只有
services-config.xml一个文件,这是什么原因??我的是 ......
flex3 中的中文字体只支持有限的几种,要么嵌入字体,要么就使用这几种:
支持一些默认的英文字体,如Arial、Times New Roman、Courier New、Georgia、Verdana等。
支持的中文字体:宋体、华文楷体、华文细黑、华文仿宋、华文中宋。
Flex3 中即使客户端装了很多字体,能使用的也只能是上面几种字体,除非嵌入字体。
但是 ......