在开发一个GridItemRenderer时,我希望将一个RadioButtonGroup进来,这样即使在DataGrid中,也可以使单选按钮起作用。 最开始我是通过将这个RadioButtonGroup放入数据中带进来的,但很快我意识到这样的做法太不好了。 因为这个组件完全不应该是数据的一部分。所以我试着将它直接传递给GridItemRenderer。 也就有了下面的代码。
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%"
xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
import com.mouee.test.exam.model.OptionItem;
import mx.collections.ArrayCollection;
import spark.components.RadioButtonGroup;
[Bindable]
private var _radioGroup:RadioButtonGroup;
public function set radioGroup(group:RadioButtonGroup):void
{
trace("set radiogroup");
this._radioGroup = group;
}
// 如果没有这个方法是会报错的,跟踪可以发现该方法会在setter调用之前调用一次,之后再调用一次,原因未知。
public function get radioGroup():RadioButtonGroup
{
trace("get radiogroup");
return this._radioGroup;
}
// 本来是想通过这个方法将外部组件引入
override public function prepare(hasBeenRecycled:Boolean):void {
if( data )
{
//radio.selected = Boolean(data[column.dataField]);
//radio.group = data.group;
}
}
protected function radio_changeHandler(event:Event):void
{
if( radio.selected )
{
var options:ArrayCollection = column.grid.dataProvider as ArrayCollection;
for(var i:uint = 0; i < options.length; i++)
{
if( i == this.rowIndex)
{
OptionItem(options.getItemAt(i)).selected = true;
}
else
{
OptionItem(options.getItemAt(i)).selected = false;
}
}
}
}
]]>
</fx:Script>
<s:RadioButton id="radio" horizontalCenter="0" group="{_radioGroup}" selected="{data.selected}" change="radio_changeHandler(event)"/>
</s:GridItemRenderer>
下面看看引用这个ItemRenderer的代码:
<fx:Declarations>
<s:RadioButtonGroup id="radioGroup"/>
</fx:Declarations>
<s:DataGrid id="grid" width="100%" height="100%" dataProvider="{_options}"
editable="true">
<s:columns>
<s:ArrayList>
<s:GridColumn width="60" dataField="selected" editable="false"
headerText="Correct">
<s:itemRenderer>
<fx:Component>
<renderer:RadioItemRenderer radioGroup="{radioGroup}"/>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
<s:GridColumn dataField="title" headerText="Premise"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
编译后会有一个警告,目前还没有找到解决办法:
数据绑定将无法检测对“radioGroup”的指定。
请注意第一段代码中斜体,其实这段代码已经可以保证单按钮钮的选中状态了。所以,这个renderer可以简化为这样:
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%"
xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
import com.mouee.test.exam.model.OptionItem;
import mx.collections.ArrayCollection;
protected function radio_changeHandler(event:Event):void
{
if( radio.selected )
{
var options:ArrayCollection = column.grid.dataProvider as ArrayCollection;
for(var i:uint = 0; i < options.length; i++)
{
if( i == this.rowIndex)
{
OptionItem(options.getItemAt(i)).selected = true;
}
else
{
OptionItem(options.getItemAt(i)).selected = false;
}
}
}
}
]]>
</fx:Script>
<s:RadioButton id="radio" horizontalCenter="0" selected="{data.selected}" change="radio_changeHandler(event)"/>
</s:GridItemRenderer>
分享到:
相关推荐
ActionScript Flex.3.Language.Reference.cnActionScript Flex.3.Language.Reference.cnActionScript Flex.3.Language.Reference.cn
[Flex.3实战].(美)艾哈迈德,(美)赫希,(美)阿比德.扫描版,资源大小:37.5 MB,欢迎下载
flex.exe和bison.exe是UnxUtils包中的文件,已经将许多Unix/Linux平台的程序都移植到了Windows平台,解压缩之后在系统的PATH环境变量中增加UnxUtils所有的exe文件所在的目录,使 得DOS命令行可以直接搜索到flex.exe...
Flash.Builder.4.&.Flex.4 Flex4 一本学习Flash Builder的及时雨
[Flex.3实战].(美)艾哈迈德,(美)赫希,(美)阿比德.扫描版.pdf ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
com.springsource.flex.messaging.common-3.2.0.3978.jar
软件介绍: 编译原理课程教学中就需要使用这个flex.exe软件来进行操作,而且会有相应的教程使用,具体使用方法参考书中范例。
[Flex.3权威指南].(美)塔伯.扫描版.part02 [Flex.3权威指南].(美)塔伯.扫描版.part02 [Flex.3权威指南].(美)塔伯.扫描版.part02
org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包,org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3....
本文档由于太大,分三部分压缩上传上传,依次标注了(一),(二),(三),全部下载后点击part1解压即可。
[Flex.on.Java(第1版)].(Flex.on.Java).Bernerd.Allmon&Jeremy;.Anderson.文字版
Flex.for.Designers Flex设计书 Flex.for.Designers Flex设计书
Adobe.Flex.4.Language.Reference FLEX, FLEX4, FLEX4官方资料
MyEclipse下配置Flex.doc MyEclipse下配置Flex.doc MyEclipse下配置Flex.doc MyEclipse下配置Flex.doc
org.springframework.flex.roo.addon-1.0.0.M1.jar
php+flex.......................
Adobe.Flex.4.5.Fundamentals.Training.from.the.Source(第1版)].(Adobe.Flex.4.5.Fundamentals.Training.from.the.Source).Michael.Labriola.文字版.pdf
j2ee建工程需要的flex.war flex.war&blazeds.war&samples.war&flex-admin.war
Flex.3数据绑定(2)Flex.3数据绑定(2)Flex.3数据绑定(2)Flex.3数据绑定(2)
MyEclipse下配置Flex、MyEclipse下配置Flex.rar、MyEclipse下配置Flex.rar、MyEclipse下配置Flex.rar