Динамическая анкета во Flex - PullRequest
1 голос
/ 02 апреля 2011

Я хочу создать шаблон для вопросников во Flex 3, который читает динамический XML-файл и создает вопросник. Примерный XML:

<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, но как мне обработать мои ответы, если в каждом вопросе их мало с одинаковым тегом «answer»? И как я могу получить доступ к свойству value каждого из них, чтобы проверить, правильно ли пользователь выбрал правильный ответ?

1 Ответ

1 голос
/ 02 апреля 2011

Вам необходимо создать модель домена из 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(node.@value);
   }
}

Заполните ArrayCollection ваших узлов следующим образом:

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

Это примерно так. Тогда ваш массив вопросов может служить dataProvider для повторителя. И вопрос.ответы могут служить повторителем для внутреннего повторителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...