2010-08-17 119 views
0

我想知道如果任何人有任何運氣與flex中以下senario。Flex開關項目渲染器

我想能夠有一個自定義項目渲染器,委託給另一個渲染器。

如果數據提供者的行具有布爾值,則會在數據網格中顯示覆選框。當值爲非布爾值時使用默認項目渲染器。

基本上我希望使用代理對象(儘管不一定是代理類),以便我可以將渲染器的所有責任委託給子渲染器。

很難解釋。

編輯1

我認爲下面給出的是什麼我想到一個清晰的概念。爲了展示這個想法,這只是很快被打破。

SwitchingRenderer.as

package com.example 
{ 
    import mx.controls.CheckBox; 
    import mx.controls.dataGridClasses.DataGridItemRenderer; 
    import mx.controls.listClasses.BaseListData; 
    import mx.controls.listClasses.IDropInListItemRenderer; 
    import mx.core.IDataRenderer; 
    import mx.core.UIComponent; 

    public class SwitchingRenderer extends UIComponent implements IDataRenderer, IDropInListItemRenderer 
    { 
     private var checkboxRenderer:CheckBox; 
     private var defaultRenderer:DataGridItemRenderer; 
     private var currentRenderer:IDataRenderer; 
     public function SwitchingRenderer() 
     { 
      this.checkboxRenderer = new CheckBox(); 
      this.defaultRenderer = new DataGridItemRenderer(); 
      this.currentRenderer = defaultRenderer(); 
      super(); 
     } 

     public function get data():Object 
     { 
      //If the data for this cell is a boolean 
      // currentRender = checkBoxRenderer 
      // otherwise 
      // currentRenderer = defaultRenderer 
     } 

     public function set data(value:Object):void 
     { 
      currentRenderer.data = value; 
     } 

     public function get listData():BaseListData 
     { 
      return currentRenderer.listData; 
     } 

     public function set listData(value:BaseListData):void 
     { 
      currentRenderer.listData = value; 
     } 



    } 
} 

回答

2

如果你正在使用Flex 4 Spark組件窺視itemRendererFunction,

下面是從interwebs一個good sample

不幸的是,Flex 3組件,如DataGrid不支持。

如果發送到itemRenderer的數據不是布爾值,那麼您對顯示的內容會有點模糊。但是,您可以根據數據更改事件輕鬆修改組件的外觀,包括交換組件子項的可見屬性,更改狀態或更改ViewStack的selectedIndex。所有這些都可以在itemRenderer沒有問題的情況下完成。


編輯:

基於用戶的附加發帖,我想補充一點,他是什麼後,可以做這樣的:

public function get data():Object 
{ 
    if(this.data is Boolean){ 
     checkBoxRenderer.visible = true; 
     defaultRenderer.visible = false; 
    } else { 
     checkBoxRenderer.visible = false; 
     defaultRenderer.visible = true; 

    } 

} 
+0

我希望我已經clarifed我的問題有點。 – Wes 2010-08-18 21:43:07

+1

我已經編輯了我的答案,但是我會指出你原來的帖子沒有問題。試圖執行此操作時遇到問題嗎?你已經在你的問題中定義了算法邏輯。 – JeffryHouser 2010-08-19 02:14:26

+0

是的,我曾考慮過這個。我明白我的問題是不同的。它是一個有用的答案,但是,我試圖看看該方法是否可行。 – Wes 2010-08-20 22:07:20