問題
你想在運行時修改List或DataGridColumn的渲染器,或改變渲染器的屬性。
解決方案
使用ClassFactory對象作爲Itemrenderer。ClassFactory實現了IFactory接口,你只要傳一個類對象(即Class類型的對象)給它,它就可以生成這個類的對象。
討論
這種解決辦法,使用了工廠設計模式,並且使用了flex的一些內部機制。在使用工廠模式時,你需要指定一個類型給工廠,這個類型的對象會被工廠類產生並作爲渲染器使用,並且工廠類可以控制渲染器的生命週期。那麼我們如何把類型指定給工廠類呢?我們需要傳一個類對象給工廠類,正如下邊的代碼。
var factory:ClassFactory = new ClassFactory(oreilly.cookbook.SevenTwoFactor );
在這裏原文提到了 SevenTwoFactor繼承IFactory接口等等,大家需要多瞭解一些ClassFactory的相關知識,在實際操作中,我們一般都是創建ClassFactory的實例賦值itemRenderer。因爲set itemRenderer方法需要的參數是IFactory類型,系統最終會用這個factory對象實例我們的itemRenderer。也就是說,我們給系統的不是一個itemRenderer而是一個能產生itemRenderer的factory,在系統需要時自己用factory產生itemRenderer的實例,也許信息的讀者會發現,當我們寫mxml的時候,itemRenderer的屬性可以賦值一個類路徑,這就是因爲flex對mxml裏的itemRenderer做了一些特殊的功能,如果你傳的是一個類路徑,系統會幫你創建一個ClassFactory。
例子:
DynamicRenderer
SmallIconRenderer
BigIconRenderer