2011-04-02 48 views
1

我想为Flex 3中的调查问卷制作模板,该模板读取动态XML文件并创建调查问卷。示例性XML:Flex中的动态调查问卷

<test> 

<question> 
    <q>Who was born earlier?</q> 
    <answer value="true">Vincent van Gogh</answer> 
    <answer value="false">Piet Mondrian</answer> 
</question> 

<question> 
    <q>What color is Dutch national flag?</q> 
    <answer value="false">blue, red and green</answer> 
    <answer value="false">green, red and white</answer> 
    <answer value="true">blue, red and white</answer> 
</question> 

<question> 
    <q>Which season is the coldest?</q> 
    <answer value="false">fall</answer> 
    <answer value="true">winter</answer> 
    <answer value="false">spring</answer> 
    <answer value="false">summer</answer> 
</question> 

</test> 

问题和答案的数量可能会有所不同。计划是使用带单选按钮的嵌套中继器(一个用于问题,另一个用于答案)。我可以将所有的question.q保存到一个ArrayCollection中,但是如何处理我的答案,如果在每个问题中都有相同的“答案”标签中的少数答案?我怎样才能访问每个的“价值”属性,以检查用户是否选择了正确答案?

回答

1

您需要从XML创建一个域模型。不要跳过这一步,因为它比您想象的更容易,更直接。通过创建一个简单的类开始:

public class Question { 
    public var question : String; 
    public var answers : ArrayCollection = new ArrayCollection(); 

    public Question(node : XML) { 
     question = node.q.text(); 
     for each(var answer : XML in question.answer) { 
      answers.addItem(new Answer(answer)); 
     } 
    } 
} 

public class Answer { 
    public var text : String; 
    public var correct : Boolean; 

    public Answer(node : XML) { 
     text = node.text(); 
     correct = Boolean([email protected]); 
    } 
} 

填充您的节点的ArrayCollection像这样:

var questions = new ArrayCollection(); 
for each(var node : XML in xml.question) { 
    questions.addItem(new Question(node)); 
} 

这是粗略的。然后,您的问题数组可以作为中继器的dataProvider。 question.answers可以作为内部中继器的中继器。

+0

看起来不错,只是有些东西不起作用,我不知道为什么.. :)我创建了2个类的文件和问题和答案。然后,我通过HTTP Service获取我的xml文件并保存:xml = questionService.lastResult.question as XMLList;在这一刻,一切工作正常,因为我跟踪(XML),没关系。然后,我尝试使用您的代码填充ArrayCollection,但它不起作用。当我尝试跟踪(问题)时,它是空的。问题[0]已经超出范围。所以它不填充它,但为什么? – Cela 2011-04-02 19:32:26

+0

也许我只是在做类错误的类?他们应该在单独的文件中,而不是在我的主要mxml文件中,对吗?我应该在哪里放置这些文件...?我现在把它们放在默认包中,和我的主要mxml – Cela 2011-04-02 19:51:39

+0

@Cela一样,将问题和答案分离成文件是有意义的。我只是为你的项目(com.yoursite.questionaire)创建一个简单的包结构。我相信你可以想出一些东西。但我不认为这是你的问题。你想找到的问题是你进入第一个循环?如果是,它会进入你的第二个循环?在每个循环之后尝试追踪语句。你可能需要做xml.test.q.我没有测试和编译我的代码。尽我所能记得我只是从记忆中工作。我也改变了XMLList - > XML。祝你好运 – chubbsondubs 2011-04-02 20:49:59