Archive for the ‘Actionscript’ Category

關於 Skin 的 Style Chain

Tuesday, April 29th, 2008

今天不願具名的魔人說了個關鍵的技巧, 速記其銘言以表敬意:
問:

Skin 與 本體Component 如何透過style 來取得數值?

答:

Actionscript:
  1. //原始檔: Button.as line 1508 @Flex3 sdk
  2. // ***注意 styleName的型別...是Object !//
  3. var styleableSkin:ISimpleStyleClient = newSkin as ISimpleStyleClient;
  4. styleableSkin.styleName = this;

加上

Actionscript:
  1. ProgrammaticSkin#getStyle(styleProp:String"):*

Actionscript:
  1. //原始檔 ( ProgrammaticSkin.as line 517 @Flex3 sdk)
  2. public function getStyle(styleProp:String):*
  3. {
  4.         return _styleName.getStyle(styleProp);
  5. }

keynote: 數位典藏

Tuesday, April 22nd, 2008

RIA 在數位典藏的實作應用:

投影片:
RIA Demo 投影片

原始檔:
RIA Demo 範例原始檔

Adobe Actionscript Coding Convention

Sunday, April 20th, 2008

Adobe 官方寫的 AS 程式撰寫規則
http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

取得HierarchicalCollectoinView的第一筆物件

Tuesday, April 15th, 2008

這個標題看起來很蠢,不過,HierarchicalCollectionView 提供的API本身並無 getItem() , getItemAt() 之類的方法,因此如何取得資料結構中第一筆?

方法一:
用ViewCursor, 新建立的cursor就是指向第一筆
myHCV.createCursor().current;

方法二: (由不願具名的魔人提供的高級作法)
myHCV.mx_internal::treeData.getItemAt(0);
treeData 其實是HCV真正在操作的資料集合,它是一個ICollectionView,因此可以引用getItem()...等方法。

拖拉物件從ListBase 到 AdvancedListBase

Monday, April 7th, 2008

把傳統的ListBase item 拖拉到 AdvancedListBase 基本上是不會成功的,因為在DragSource::dataFormat,一個是"items", 一個是"treeDataGridItems" ,我們可在DragDrop發生之前,用DragSource::addData()改變DragEvent::dragSource 內資料定義即可, 這樣ADG就會Accept Drop了(會顯示Drop Feedback)

Actionscript:
  1. function onDragEnter(event:DragEvent):void{
  2. event.dragSource.addData( myObject , "treeDataGridItems" );
  3. }

發現一些好用的方法:
可以得到目前拖放物件在List中的索引位置!
AdvancedListBase::calculateDropIndex ( event:DragEvent ) : int

藉由索引值取得對應的itemRenderer instance
AdvancedListBase::indexToItemRenderer( index :int ):IListItemRenderer

結合兩者:

Actionscript:
  1. function onDragDrop(event:DragEvent){
  2. var ir:IListItemRenderer = adg.indexToItemRenderer( adg.calculateDropIndex (event ) );
  3. var myData:Object = ir.data;
  4. var hv:HierarchicalCollectionView = adg.dataProvider as HierarchicalCollectionView;
  5. //取得父節點,插入新物件
  6. var parentNode : Object = hv.getParentItem( myData );
  7. var myNewData:Object = event.dragSource.dataForFormat("treeDataGridItems"); //取出新物件
  8. hv.addChildAt( parentNode, myData , 0 ); //放入
  9.  
  10. adg.validateNow();
  11. }

使ADG吃完資料且繪製完後自動展開

Tuesday, April 1st, 2008

答案出乎意料的簡單,特寫此文以表敬意, 請用:

AdvancedDataGrid::displayItemsExpanded = true;

官方文件說明:
If true, expand the navigation tree to show all items. If a new branch is added, it will be shown expanded.
The default value is false.

奧妙往往都在手冊之中呢。

AIR Tour in Taipei

Wednesday, March 19th, 2008

萊恩‧史都華(Ryan Stewart)來到台北講演AIR了。
AIR的新功能不在這裡贅述了,可以在官方網站找到很多,或可以問問參加過Jeremy的網聚的朋友們,內容八九不離十,在短短的2小時內能說的東西不太多,點到為止吧。
他舉了一些網站:

他比我想像中的年輕點,領帶顏色很棒,哈。說話的速度也故意放慢許多,對於一個Evangelist來說這是必要的,他這次來的很匆促,不然可以推薦他去爬爬台灣百岳,讓他見識一下台灣山岳的狂野壯闊。
Next time, hold the conference here!
我問了個問題:

Adobe有沒有要設計可以顯示直書的TextField? 像是中文字可以直的書寫。

Ryan:

短期來說,不會。但是在之後會開放Text Renderer的API,讓開發人可以自訂文字在swf裡的繪製方法。

聽起來很棒,但是想想 自己寫 Text Rendering 的演算法不是件容易的事情呢! 不過我還是很期待。

簡介Flex新套件: OLAP

Monday, March 3rd, 2008

kaleido scope

什麼是OLAP?

OLAP 是 Online Analytical Processing,線上資料分析的縮寫,對於知識管理、資料挖礦來說這是基本的工具,可以確定世界上資料只會越來越多,因此資料分析工具是必要的。

OLAP的結構

把OLAP想像成玩萬花筒,筒裡頭裝滿了彩色的資料碎片,當旋轉時會產生不同組合結果。這個萬花筒叫做OLAP Cube;資料碎片是Flat Data;筒內的鏡面叫OLAP Dimension;旋轉萬花筒的手如同OLAP Query;最後的彩色繽紛當然是OLAP Result了。

(more...)

Flex!!!

Monday, February 25th, 2008

Flex Builder3
Flex 3 今天上市了。
可以到官方網站下載試用版...

新舊比較表:
Flex Builder3 Comparison chart

[翻譯]ActionScript重構三部曲之三(Advanced ActionScript Refactoring - Step 3)

Wednesday, January 23rd, 2008

這些文章翻譯自Sho Kuwamoto的ActionScript Refactoring 三部曲,經過原作者同意翻譯之。
本文原文連結在此。

最後一關了,快破關了。
一開始的版本會變成這個模樣,排版方式可以動態改變了!
回想第二步,我們沒做什麼refactoring,只有把Styles關掉,然後移出DragTile的程式碼,再把Styles加回去,之後Layout都擁有自己的Style了。
(more...)