春觀夜櫻 夏望繁星 秋賞滿月 冬會初雪

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下载

下载文件为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>

下面是网页代码:

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]