2010年6月21日 星期一

沒有等價於Spreak組件的MX組件

Flex4中若是有等價於MX的Spark組件建議優先使用,因為Spark組件將layout、style、skin抽離,使得組件更靈活,因此在Flex4使用手冊中有建議優先使用,而沒有等價於Spark組件時就繼續使用mx組件。
以下這張表列出沒有等價於Spark的mx組件表。

2010年6月18日 星期五

SWF 安全 crossdomain.xml檔

§SWF 安全性允許拜訪  crossdomain.xml
引言:
 話說有一日小弟將開發好的SWF丟到公司的WebServer上,結果Remote變成無法取回資料了,一查之下才知道原來是Remote服務端沒有設置crossdomain.xml這個檔案,暫時為了測試先將crossdomain.mxl設置成允許所有網域拜訪,事後找了一下adobe的技術手冊,並將其部份整理一下做成筆記,以便日後方便使用。


crossdomain.xml的功能描述:
  • 若要提供您網站伺服器的資料給另一個網域中的 SWF 檔使用,可以在伺服器中建立原則檔。「原則檔」是放置於您伺服器上特定位置中的 XML 檔,這支原則檔即是crossdomain.xml。 
  • 不管是SWF對SWF或是SWF對Remote gatway都必須在其拜訪所在地置放crossdomain.xml檔,以便管理允許由哪個網域來的SWF存取資料。
 crossdomain.xml會影響存取的項目:
  • 點陣圖、聲音、視訊
  • XML與Text檔的載入
  • SWF檔的載入
  • Remote通訊 
下面是一個允許所有網域拜訪,的crossdomain.xml配置範例。
<?xml version="1.0" ?>
 <cross-domain-policy>
   <allow-access-from domain="*" />
  </cross-domain-policy>

簡單的解析Domain工具

§簡易解析domain的tools
在開發專案中,如果swf要提供Embed給其他網站使用,在swf內所要load動作等等的路徑就需要使用絕對路徑,但是若是直接將路徑寫死在開發環境環境中又要改來改去,所以最好的方式就是寫一個能夠解析目前swf所使用的domain為何,因此寫了一個簡單應急的小工具,日後若是有發現更好的方式或是BUG再回頭來補強該篇文章。

//寫一個簡單的工具Class
package com.utils.PathAnalyze
{
 public class DomainPathAnalyze
 {
  /***
  * 解析swf所在domain
  * */
  public function DomainPathAnalyze()
  {
  }

  static public function getDomain(url:String):String
  {
   var count:int = url.length -1;
   for(count ; url.charAt(count) != "/" ; count--)
   {
   }
   return url.slice(0 , count);
  }
 }
}

//可藉由Application的loaderInfo.url取得swf所在網域,然後將此url交由DomainPathAnalyze的靜態方法來取得˙Domain


/*用法*/
DomainPathAnalyze.getDomain(loaderInfo.url);

由於成長之後學習到更好的方式因該改成以下方式將會更有效能。

  static public function getDomain(url:String):String
  {
   var _index:int = url.lastIndex("/");
   return url.slice(0 , index);
  }
 
請參考 http://contest-start.blogspot.com/2011/03/blog-post.html

Flex4中以mxml tags來使用top_level ActionScript elements

§Flex4中使用top_leveel ActionScript elements
在Flex3中可以使用mxml tags來使用<Array></Array>、<Number></Number>等等top_level ActionScript elements,而這top_level elements項目都是使用,xmlns:mx="http://www.adobe.com/2006/mxml的命名空間,由於並未與視覺組件命名空間做區隔,因此若是在<Application><Application>使用了top_level elents容易與視覺元件混在一起,一方面覺得使用起來能將非視覺元件標籤直接放於視覺元件標不合理,一方面也覺得很混亂,而我自己習慣上不會去使用top_level tags的用法,但是若想測是一個組件的特性這時的top_level tags到是蠻方便的。


在Flex4中top_level elements tags設計得更合理了,這些tags是置於xmlns:fx="http://ns.adobe.com/mxml/2009"命名空間,明顯的與spark、mx來做出區隔,並且無法直接放於顯示組件tags之間,而是置放於<fx:Declarations></fx:Declarations>Tags之間使用,或是能夠接受top_level項目型別的屬性標籤之間,例如:

2010年6月15日 星期二

Flex4 Dynamic Layout

§利用Flex4的Layout特性寫一個動態更換Layout的例子
關於Flex4的Layout請參考上篇About Layout in Flex4
//動態更換layout Example
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="application1_applicationCompleteHandler(event)"
layout="{new VerticalLayout()}"
>

<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.graphics.SolidColor;
import spark.layouts.HorizontalAlign;
import spark.layouts.HorizontalLayout;
import spark.layouts.TileLayout;
import spark.layouts.VerticalLayout;
import spark.primitives.Rect;


//排版物件參照
private var rectGroupVerLayout:VerticalLayout;
private var rectGroupHorLayout:HorizontalLayout;
private var rectGroupTileLayout:TileLayout;
//色彩存放的Array
private var _colors:Array = [0xff0000,0xffc600,0xfff605,0x00ff00,0x0000ff,0x5a2fe9,0xae2fe9];


protected function application1_applicationCompleteHandler(event:FlexEvent):void
{
 //建立排版物件
 rectGroupVerLayout = new VerticalLayout();
 rectGroupHorLayout = new HorizontalLayout();
 rectGroupTileLayout = new TileLayout();
 createSevenRect();
}

About Layout in Flex, 關於Flex4中 (SDK4) 的排版

§About Layout in Flex4
在Flex4中,顯示元件的動作,樣式(Style),外觀(Skin),排版(Layout)都是抽離出來成為一個類別(Class),如此做法更合乎了物件導向觀念能讓物件之間彼此更鬆散, 降低耦合,也更合乎了MVC,因此在Flex4中的顯示元件更顯得靈活好用。

上圖是Layout的類別關係圖,可以看到Flex4中具有四種原生的Layout類別,而這四種Layout類別都繼承了LayoutBase,由此父類來達到超型態(superType)作用,而如果你想要製作自己的Layout工具,繼承LayoutBase來開發自訂的Layout類。

  • <s:BasicLayout/>    絕對位置佈局
  • <s:TileLayout/>
  • <s:HorizontalLayout/>  水平排列佈局
  • <s:VerticalLayout/>   垂直排列佈局
如何使用:
 使用標籤或是layout屬性來設定,注意在標籤中如果是小寫這代了此標籤是屬性或方法,而layout他是一個屬性。

2010年6月12日 星期六

FlashBulider使用AsDoc建立API文件時發生Error loading處理

§FlashBulider使用AsDoc建立API文件時發生Error loading處理

狀況描述:
FlashBulider使用External Tools呼叫AsDoc建立API文件發生Error loading: C:\Program Files\Java\jdk1.6.0_17\jre\bin\server\jvm.dll的處理。

作業系統環境:Windows7 64
系統上具有安裝的程式開發項目:JAVA JDK 6(64位元)(JAVA的開發包) ,FlashBulider ,Flex Bulider ,Eclipse ,Ruby

錯誤訊息:






解決方式:
於External Tools介面中,切到Environment(環境),

  • 選擇New(新增),填入以下數值
  1. name(變量): JRE_HOME   [可以取你自己習慣的名稱]
  2. value(值): C:\Program File\java\jre\bin     [你的Jre所在路徑]
  • 選擇"將本機環境變數替換為指定環境"
  • 按下Apply(應用)
  • 運行,即可再次產生API文件















不知道為什麼不可以使用JDK內部的JRE,而一定要外部的JRE。