格式化
好了!我們已經知道怎樣從一個組件中得到一個值并且把這個值放在另外一個組件中。但是這通常是不夠的。有時我們需要在組件中的數(shù)據(jù)以不同方式展現(xiàn);有時需要兩個組件展示不同的數(shù)據(jù)。 我們用格式化來實現(xiàn)這個目標。有幾個內建的格式化工具你可以選擇,同時你也可以自定義的格式,用AS2類。你可以選擇在選擇綁定時選擇格式化工具并且從列表中選擇它們。選擇自定義的格式需要用到你自己的類。
我們以內建的格式開始,比如
Boolean(布爾值)
也許是最簡單的內建格式化方式。它僅僅是一個布爾值(或真或假)并且輸出一個字符串。你可以通過真或假來選擇要描述的值——在格式化選項中。
Bool_formatter.fla
Compose String(排列字符串)
轉換一個對象的域,形成單個字符串。你可以結合任何數(shù)量的域,也可以插入其他的字符。建立一個字符串模板,選擇格式化選項并鍵入字符串。你也可以放置任何文本在這里,但是任何在”<>”表示符中的內容將被做為一個域來處理。如果對象有子對象(比如XML)那么,你可以使用它們——通過點語法來獲得它們的路徑。字符串模板的例子如下:
Compose_formatter.fla
Date(日期) 把日期轉換成字符串,簡單的模板如“MM/DD/YYYY”。允許的格式“M”(月份),“D”(日期),“Y”(年份),“H”(小時),“N”(分鐘)和“S”(秒)。你可以用格式化工具反向格式化字符串為日期,但是由于某種原因,這種做法僅僅用在雙向綁定中。
Date_formatter.fla
Number (數(shù)字) 非常簡單的格式化選項。可以顯示十進制的數(shù)字。
Number_formatter.fla
Rearrange Fields (重新排列的域)
讓你可以協(xié)調域,比如一個組件的數(shù)據(jù)源中的域名和另一個組件數(shù)據(jù)源的域名不同的情況下。域是以列表的形式成對出現(xiàn)在格式化選項中。比如一個簡單的字符串:”label=name;data=colour;otherField=yetAnotherField”。這對于顯示數(shù)據(jù)很有用,比如以下拉列表框和列表框顯示數(shù)據(jù);相應改變組件標簽域屬性,可以用重新排列的域格式化你想顯示的作為標簽的域。在這個例子中,一些XML文件已經加載了,用來移植到下拉列表框和它的域(重新排列的),所以名稱屬性被用作標簽。
Rearrange_formatter.fla
要自定義格式,需要定義一個很簡單的類,它有兩個方法:格式化和非格式化,為每種類型提供一個依據(jù),并且可以返回任何東西。在這個例子中,類格式化數(shù)字為英鎊符號:
代碼:
// class used to convert numbers to sterling currency and back again class SterlingFormatter { // turns a number into a string function format (data:Number) : String{ var currency:String; var pounds:Number = Math.floor(data); var pence:Number = Math.round((data - pounds)*100); var poundsStr:String = String(pounds); var penceStr:String; if(pence<10){ penceStr = "0" + String(pence); }else{ penceStr = String(pence); } currency = "£" + pounds + "." + penceStr; return currency; } // removes sterling format and returns a number function unformat (data:String) : Number { var str:String = data.substr(1); var num:Number = parseFloat(str); return num; } }
鍵入一個數(shù)值在左邊,看看有邊會有什么格式產生
局限、防范、實踐
創(chuàng)作時的數(shù)據(jù)綁定是基于mc路徑的,這將帶來一些局限和危險。主要的問題是當你建立一個在兩個組件之間的綁定時,這兩個組件的實例必須被唯一的標識,而且這也依賴它們的路徑。因此,如果你改變了一個組件的路徑,之后再提供綁定,將會丟失這個綁定。盡管我已經注意到你可以安全的改變組件實例的名字不必改變它們的綁定。
通常,在運行時,組件可以從絕對路徑上解決綁定問題。但是如果你提供到一個舞臺上不存在的mc的綁定,綁定將從可以被識別的mc中選擇“最遠的”。問題是同樣的mc將被不同的解釋,如果該mc是在舞臺上編輯過的或者在庫中編輯的。要避免混亂、沖突、遺失已完成的內容,你需要遵循如下的指導方針:
1、 不要對這樣的mc使用綁定:即在創(chuàng)作過程中加到舞臺上,又使用了動態(tài)附加的; 2、 不要對舞臺上選擇了“編輯”過的符號提供數(shù)據(jù)綁定。使用“本地編輯”保護mc的內部結構關系; 3、 在加入綁定之前,謹慎的規(guī)劃你的應用程序,如果程序很復雜的話。當你覺悟到因為所有的組件嵌套在一個mc里而使所有的綁定失去了作用,將是一件無法啟齒的錯誤。 4、 如果要將應用程序動態(tài)的加載到其他的影片里,使用 _level替代影片的target。
總的說來,以上的講解只是引導你用窗體建立最簡單的應用程序的開始,你還要添加很多的場景和組件。使場景都這場運轉起來后再加入數(shù)據(jù)綁定。最后一點要說明(有點討厭但它也確實是個尖銳的問題,在很多情況都會發(fā)生)。
如果你已經看過源文件,你就會發(fā)現(xiàn)我在引導層加入了一些箭頭符號。這對于簡單的綁定來說無關緊要,但是一些復雜的系統(tǒng)綁定是很難跟蹤的,所以我提倡這樣做:用最原始的“文檔”來說明你在做著什么。用語言來描述你所做的綁定是比較困難的,但是圖示可以很只管的表達綁定的意思。如果一些東西需要比較詳細的說明,那么在一個引導層用文本來注釋是很有幫助的。這些箭頭不是正是的符號,重要的是可以保留一些對將要發(fā)生的事情的暗示。
結束 數(shù)據(jù)綁定在MX2004中是個重要的主題,并且有很多方面我還沒有涵蓋到,包括運行時的API和身份認證。這本身就是個主題,但是很值得掌握——它涵蓋了很多的功能,你可以節(jié)省很多的時間和精力,不用重新構建它。
然而你也許不會選擇數(shù)據(jù)綁定面板來開發(fā)企業(yè)級應用程序,你也許直接會用運行時的API。但是數(shù)據(jù)綁定面板可以快速的提供一個原型或小型應用程序,因為它們提供了非常簡單的方法來構建復雜的數(shù)據(jù)交互。身份認證和格式化都可以通過AS2實現(xiàn)可擴展功能,是沒有限制的。
附源文件下載:fmx2004-databinding.zip fmx2004-databinding1.zip fmx2004-databinding2-1.rar fmx2004-databinding2-2.rar
出處:WebStudio
責任編輯:藍色
上一頁 Flash MX 2004 數(shù)據(jù)綁定 [1] 下一頁
◎進入論壇Flash專欄 版塊參加討論