禁用单选按钮组
Posted
技术标签:
【中文标题】禁用单选按钮组【英文标题】:Disabling radiobuttongroup 【发布时间】:2011-01-04 19:59:43 【问题描述】:由于 Repeater 组件不会在 mxml 中生成单选按钮组,并且我无法通过 ActionScript 执行相同操作,因为当我尝试以这种方式创建单选按钮组时,单选按钮组没有 id 属性,有没有办法禁用单选按钮有吗?据我所知,我唯一可以设置和访问的是单选按钮的 groupName 属性。
对于Repeater组件,我尝试直接使用xml
<mx:XML id="xquiz" source="quiz.xml" />
使用此代码:
<mx:Repeater dataProvider="xquiz.question" id="rep">
<mx:Label text="rep.currentItem.content" />
<mx:Repeater dataProvider="rep.currentItem.answer" id="rep2">
<mx:RadioButton label="rep2.currentItem" groupName="'rbg'+rep.currentIndex" click="checkAnswers(event)" value="rep2.currentItem.@correct" />
</mx:Repeater>
</mx:Repeater>
并且不能使用中继器生成单选按钮组,因为它不是可见组件。
我也尝试了 ActionScript 方法,但使用 HTTPService mxml 组件来获取 xml 文件。
<mx:HTTPService id="srv" url="quiz.xml" resultFormat="e4x" result="handleResult(event);" fault="handleFault(event);"/>
这里是动作脚本 sn-p:
private var xQuizData:XML
private function handleResult(event:ResultEvent):void
xQuizData = event.result as XML;
initApp();
private function initApp():void
var cnt:Number = 0;
for each (var question:XML in xQuizData.*)
var lbl:Label = new Label();
lbl.text = question.content;
panel.addChild(lbl);
lbl.visible = true;
var cnt2:Number = 0;
for each (var answer:XML in question.answer)
var rb:RadioButton = new RadioButton();
rb.id=String(cnt);
rb.label=answer;
rb.groupName="rbg"+String(cnt);
if (answer.hasOwnProperty("correct"))
rb.value=true;
panel.addChild(rb);
rb.visible = true;
cnt2++;
cnt++;
我希望能够捕获来自单选按钮组控件的点击,但如果使用中继器则根本无法生成它们,或者如果使用动作脚本则无法为其分配 ID。
XML 内容看起来像这样:
<quiz>
<question>
<content>Some question?</content>
<answer>Answer one</answer>
<answer correct="true">Answer two</answer>
<answer>Answer three</answer>
<answer>Answer four</answer>
</question>
</quiz>
【问题讨论】:
【参考方案1】:我很难从你的 sn-ps 中跟踪你试图做的事情,所以这是我的一个 sn-p,它应该完全符合你的要求。希望您可以查看它并根据您的问题对其进行调整。
public function buildVBox():void
tempVBox.removeAllChildren();
var iterator:Number = 0;
for each (var i:XML in myXML.children())
var tempCanv:Canvas = new Canvas();
tempCanv.id = iterator.toString();
var tempRadYes:RadioButton = new RadioButton;
tempRadYes.x = 30;
tempRadYes.y = 20;
tempRadYes.origY = 20;
tempRadYes.groupName = "rbg" + iterator.toString();
tempRadYes.value = 1;
tempRadYes.label = "Yes"
tempCanv.addChild(tempRadYes);
var tempRadNo:extRadioButton = new extRadioButton;
tempRadNo.x = 80;
tempRadNo.y = 20;
tempRadNo.origY = 20;
tempRadNo.groupName = "rbg" + iterator.toString();
tempRadNo.value = 2;
tempRadNo.label = "No"
tempCanv.addChild(tempRadNo);
var tempRadNA:extRadioButton = new extRadioButton;
tempRadNA.x = 120;
tempRadNA.y = 20;
tempRadNA.origY = 20;
tempRadNA.groupName = "rbg" + iterator.toString();
tempRadNA.value = 0; tempRadNA.label = "N/A"
tempCanv.addChild(tempRadNA);
tempVBox.addChild(tempCanv);
iterator++;
【讨论】:
你在做和我一样的事情。我对单选按钮进行分组没有问题,但是在访问特定组以便一次触发所有按钮上的事件时,请检查单击的答案是否正确并禁用整个组。区别在于单选按钮属性“groupName”和“group”。我需要使用“组”属性,但不能让它与动态创建的单选按钮组控件一起使用。 :( 在这里找到解决方案:jonathanrowny.com/journal/radiobuttongroup-inside-repeater【参考方案2】:从这里得到解决方案:http://www.jonathanrowny.com/journal/radiobuttongroup-inside-repeater
【讨论】:
以上是关于禁用单选按钮组的主要内容,如果未能解决你的问题,请参考以下文章