Flex开关项目
我想知道是否有人在flex中使用了以下的senario。
我希望能够有一个自定义的项目渲染器,其中委托给另一个渲染器。
这样做的原因是在数据网格中,如果该行的数据提供者具有布尔值,则显示复选框。 当值为非布尔值时使用默认项目渲染器。
基本上我希望使用代理对象(尽管不一定是代理类),以便我可以将渲染器的所有责任委派给子渲染器。
很难解释。
编辑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;
}
}
}
如果您使用Flex 4 spark组件查看itemRendererFunction,
这是来自interwebs的一个很好的例子。
不幸的是,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;
}
}
链接地址: http://www.djcxy.com/p/34627.html
上一篇: Flex switch item