在 DataGrid 列中使用单选按钮和单选按钮组(在测验应用程序中)

Using RadioButton with RadioButtonGroup in a DataGridColumn (in a quiz application)

我在测验应用程序中正确使用多个 RadioButton 组件和 RadioButtonGroup 时遇到了一些问题(当它们通过 DataGridColumn 下的 ItemRenderer 呈现时)。

测验页面显示一个问题以及 4 个可能的答案,这些答案由 RadioButton 组件(与唯一的 RadioButtonGroup 绑定)表示。一个测验通常包含很多选择题。

一切正常,直到我导航到下一个问题并 return 到上一个问题;然后我可以在单选按钮中看到我以前的答案 selection 尽管当我更改我的答案和 select 一个不同的单选按钮时它会保留我的旧 selection 并添加新的,这是完全不合理的(因为 RadioButtonGroup 应该只执行 selection 一个选项)。

这是我定义 DataGridColumn 的方式:

<mx:DataGrid y="141" height="373" dataProvider="{currentQuestion.answers}" id="answersGrid" visible="false"  styleName="NoStyleDataGrid" useRollOver="false" headerHeight="0" width="381" x="461" variableRowHeight="true">           
          <mx:columns>                                
            <mx:DataGridColumn  width="20" dataField="key">
                <mx:itemRenderer>
                      <mx:Component>
                        <mx:Canvas width="100%" height="100%" verticalScrollPolicy="off" horizontalScrollPolicy="off" top="0">
                            <mx:Script>
                                <![CDATA[
                                    import mx.core.Application;
                                ]]>
                            </mx:Script>

                            <mx:RadioButton id="rb" value="{data.number}" selected="{outerDocument.isSelected(data.number,rb)}"  group="{outerDocument.getGroup()}" click="outerDocument.setAnswerState(event,data.number)" width="100%" height="30" x="12" y="0" />                                

                        </mx:Canvas>                                    
                      </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>

我使用以下代码确保每个问题都有自己独特的组来包含 RadioButton 组件(作为答案):

        public function getGroup():RadioButtonGroup{                
            if(radioGroupMap[currentQuestion.key]!=null){                                       
                return radioGroupMap[currentQuestion.key] as RadioButtonGroup;                                      
            }                               
            radioGroupMap[currentQuestion.key] = new RadioButtonGroup();
            return radioGroupMap[currentQuestion.key] as RadioButtonGroup;
        }

只要我不转到下一个问题并且 return 转到上一个问题,此代码就可以正常工作。

感谢在此问题上的任何帮助。

谢谢!

经过一些研究,似乎在数据网格列上包含 RadioButton 和 RadioButtonGroup 的项目呈现器不是一个好的设计选择。由于性能原因,显然创建了比实际需要更多的项目渲染器,这使得 UI 以不可预测的方式运行。

我改为使用 VBOX,并使用 ActionScript 动态创建 RadioButton 和 RadioButtonGroup。这是一些代码示例:

            function populateAnswers(){
                var rbg:RadioButtonGroup = new RadioButtonGroup();
                for each ( var ans:Answer in currentQuestion.answers){
                    var row:HBox = new HBox();
                    var rb:RadioButton = new RadioButton();
                    rb.group = rbg;
                    rb.id = ""+ans.number;
                    var num:int = ans.number;
                        rb.addEventListener(MouseEvent.CLICK,setAnswerState);
                rb.selected = isSelected(ans.number);                       
                        row.addChild(rb);                       

                    var answerBoby:Text = new Text();
                    answerBoby.enabled = false;
                    answerBoby.styleName = "readOnlyTA";
                    answerBoby.selectable = false;
                    answerBoby.htmlText = ans.body;
                    row.addChild(answerBoby);
                    quizAnswersPanel.addChild(row);                     

                }