2011-04-02 54 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