最近用flex来做一个工作流定义编辑器。在网上找了很多例子,也学到了不少东西。
flex是adobe公司出的对于flash的一个产品。对于学过java的人来说再简单不过了。这里也不多说了,就对于这几天在项目中遇到的问题谈一下自己的解决方法与认识。
一、flex中将自己的一个Canvas变成为图片,保存到本地。
var bitmapData:BitmapData = new BitmapData(myCanvas.width, myCanvas.height);
bitmapData.draw(myCanvas,new Matrix());
var byteArray:ByteArray = new JPEGEncoder(80).encode(bitmapData);
这里变成了一个字节数组,
保存本地可以用(FileReference):fr.save(byteArray,filename);
远程的可以用:
var request:URLRequest = new URLRequest(url);
request.method=URLRequestMethod.POST;
request.contentType = "application/octet-stream";//
request.data = byteArray;
var loader:URLLoader = new URLLoader();
try{
loader.load(request);
}catch (error:Error) {
Alert.show("上传失败");
}
二、关于给as中的变量从外部给予初始值。这个我用的是javascript。
as中:
--------------------------------------------------------------------
ExternalInterface.addCallback("setSessionId",setSessionId);//给javascript调用的接口
private function setSessionId(argId:String):void{
fileUpload.JSessionId = argId;
}
--------------------------------------------------------------------------------
js中:
getSWF("WorkFlowDesigner").setSessionId(sessionId);
function getSWF(movieName){
if (navigator.appName.indexOf("Microsoft") != -1){
return window[movieName];
}
else {
return document[movieName];
}
}
这里有一个问题:在flex还没有加载完毕这里的js就不能调用,也就是存在一个延迟加载的问题。我直接用
window.οnlοad=function(){
//这里让flex有时间来加载
setTimeout("setInitParam()",2000);
};
问题解决了。
-------------------------------------------------------------------------------
三、关于flex中的沙箱。
什么是沙箱了:我的理解就是在flex中(包括flash)中在使用网络上,因为有时候会出现如:从hao123网面到sina的一个异域的访问,如果在sina的crossdomain.xml文件中有hao123的配置,那么这个flex就可以访问。
其实我在这里也没有用到这点。可能是因为遇到了代理服务的问题,flex认为是异域。所以我也加上了crossdomain.xml
内容为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
四、关于as中自定义事件。
public static const STATUSCHANGED:String="myStatusChanged";
------------------------当这个方法执行--------------------------
var e:Event =new Event(STATUSCHANGED);
dispatchEvent(e); //这里会触发下面的onstatuschanged函数
------------------------- 下面的方法onstatuschanged就会执行 ---------------------------------
//这里绑定了一个选择事件,有一个监听
myDrawBoard.addEventListener(DrawBoard.STATUSCHANGED,onstatuschanged);
五、关于flex中XML类的使用。
as中提供的XML类非常好用:
var xml:XML=new XML("<rootnode/>);
xml.@ID = "id"
xml.appendChild(new XML("<childnode/>));
解析成:
<rootnode id="id"><childnode/></rootnode>
还有一些东西以后慢慢再写吧。。。