2
2009.1
Flex已经开源,而更高兴的是它现在也可以跨平台开发了。现在我已经逐渐转入到ubuntu了,于是想在ubuntu中开发Flex。虽然在配置开发环境的过程中遇到了很多困难,但在成功时的那份喜悦却是无法形容的。
配置Flex环境首先要配置Java环境,Java的版本要是1.6的,你可以用下面的命令查看系统中Java的版本。
java -version如果已经是1.6的版本了,你就可以进行下面的步驟了,如果不是,就查看《Java安装配置》,安装最新版本的Java。
到Flex SDK下载页面下载最新的Flex SDK。最好选择最新的Adobe Flex SDK,我刚开始用的是Open Source Flex SDK,出现了很多错误,后来选择Adobe Flex SDK就正常了,我选的是118M的Adobe Flex SDK,如图:
下载文件为flex_sdk_3.zip,我把它放到了桌面上,打算把它放在目录/media/tools/flexsdk/中,当然你可以把它解压到任何目录中。用命令行操作的话键入如下命令:
21
2008.12
这段时间要做一个需要JS与Flex交互的页面,但在制做过程中不停地出现错误,查了很多资料,自己也在不断地摸索尝试各种方法,得出了一些需要注意的问题。
一,在Flex中,addCallack所输出供给JS调用的函数名称不能与JS中己有的函数名称相重复,如下所示:
ExternalInterface.addCallback("play",callThis);上面这一句在IE中就发生错误,因为“play”这个函数名称已经被分配给DOM元素了,改一个名字就可以了,如下就正确了。
ExternalInterface.addCallback("MyPlay",callThis);二,在向页面中嵌入swf文件时,要用Adobe的官方JS文件或者版本为2.+的SWFOBJECT。
Adobe的官方JS文件就是AC_OETags.js文件,如果你用的是Flex SDK,可以在Flex SDK安装目录下的templates文件夹中找。在用AC_OETags.js文件时,请把下面这段代码加入到页面中:
function getMovie(movieName){
if (navigator.appName.indexOf("Microsoft")!=-1){
return window[movieName];
} else {
return document[movieName];
}
}
用下面的代码调用Flex中的命令:
getMovie('MyFlex').MyPlay();如果使用的是SWFOBJECT,请使用2.0或2.0以上的版本,使用方法可以查看《翻译:SWFOBJECT 2.0官方文档》,然后使用如下语句调用Flex中的命令:
swfobject.getObjectById("MyFlex").MyPlay();查看演示请点击这里。mxml文件代码如下 :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init();" layout="vertical" verticalAlign="middle" horizontalAlign="center">
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
public function init():void{
btn.addEventListener(MouseEvent.CLICK, btnClick);
ExternalInterface.addCallback("jsCallFlex",callThis);
}
public function btnClick(evt:MouseEvent):void{
ExternalInterface.call("alert","Flex调用JS方法!");
}
public function callThis():void{
mx.controls.Alert.show('JS调用Flex内部方法!');
}
]]>
</mx:Script>
<mx:Button label="点击这里" id="btn" />
</mx:Application>html文件代码如下:
19
2008.12
在Flex中要获得url传递的参数值时,分两种情况:
第一种,如果是在浏览器直接打开swf文件,如下所示:
http://www.example.com/example.swf?name=value
上面这种情况下可以直接使用this.parameters.name这种方式在flex里面取url参数。
第二种,如果是要在一个包含swf文件的html页面中获得参数值,如下所示:
这时取得url参数就相对要麻烦点,在网上找了些方法,觉得还是jexchen的方法最方便,详细请看:《Flex程序如何获取html容器传递的URL参数值》。
我把他的代码稍微改了点,可以用表格的方式直接看url参数。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();" verticalAlign="middle" horizontalAlign="center">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var dp:ArrayCollection = new ArrayCollection();
private function init():void{
var myStr:String=ExternalInterface.call("window.location.search.substring",1);
if(myStr){
var pairs:Array = myStr.split("&");
for(var i:uint=0;i< pairs.length;i++){
var pos:int = pairs[i].indexOf("=");
if(pos != -1){
var argname:String = pairs[i].substring(0, pos);
var value:String = pairs[i].substring(pos+1);
var myObj:Object=new Object();
myObj['name']=pairs[i].substring(0, pos);
myObj['value']=pairs[i].substring(pos+1);
dp.addItem(myObj);
}
}
}
}
]]>
</mx:Script>
<mx:DataGrid dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Name" />
<mx:DataGridColumn dataField="value" headerText="Value" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
演示:请点击这里。jexchen现在又找到一个用SWFObject的新方法来获得url参数值,可以参看《再谈:Flex程序如何获取html容器传递的URL参数值》。
28
2008.6
flex接收flashvars的方法和flash不一样,在as3中是用“root.loaderInfo.parameters”或“stage.loaderInfo.parameters”来取得传递的参数,而在flex中则要用“Application.application.parameters”来取得。看下面的代码,我们将利用“Application.application.parameters”的方法来取得flashvars传递过来的两个参数:myName和myHometown。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initVars()">
<mx:Script><![CDATA[
// Declare bindable properties in Application scope.
[Bindable]
public var myName:String;
[Bindable]
public var myHometown:String;
// Assign values to new properties.
private function initVars():void {
myName = Application.application.parameters.myName;
myHometown = Application.application.parameters.myHometown;
}
]]></mx:Script>
<mx:VBox>
<mx:HBox>
<mx:Label text="Name: "/>
<mx:Label text="{myName}" fontWeight="bold"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="Hometown: "/>
<mx:Label text="{myHometown}" fontWeight="bold"/>
</mx:HBox>
</mx:VBox>
</mx:Application>下面是网页代码:






