Отключение радиобутонгруппы - PullRequest
0 голосов
/ 13 января 2010

Поскольку компонент Repeater не будет генерировать radiobuttongroup в mxml, и поскольку я не могу сделать то же самое с помощью ActionScript, потому что radiobuttongroup не имеет свойства id, когда я пытаюсь создать его таким образом, есть способ отключить radiobuttons совсем? Насколько я вижу, единственное, что я могу установить и получить доступ - это свойство 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);"/>

и вот фрагмент ActionScript:

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++;
                }
            }

Я хочу иметь возможность отлавливать клики из элементов управления радиобутгруппы, но не могу заставить их генерировать вообще, если с повторителем, или не могу назначить им идентификатор, если с помощью actioncript.

Содержимое 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>

Ответы [ 2 ]

0 голосов
/ 14 января 2010
0 голосов
/ 14 января 2010

Мне трудно следить за тем, что вы пытаетесь сделать из своих фрагментов, так что вот мой фрагмент, который должен делать именно то, что вы хотите. Надеюсь, вы сможете просмотреть его и адаптировать для вашей проблемы.

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++;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...