Flex - привязка данных от дерева к повторителю - PullRequest
1 голос
/ 05 декабря 2008

Я пытаюсь сделать редактор вопросов XML во флэш-памяти. В основном я загружаю XML в компонент Tree - XML ​​примерно так:

<questions>
<question id="1" type="radio" text="This is question 1" isBranch="true">
  <option id="1.1" correct="false" text="This is option 1" />
  <option id="1.2" correct="false" text="This is option 2" />
  <option id="1.1" correct="false" text="This is option 1" />
  <option id="1.2" correct="false" text="This is option 2" />
  <option id="1.3" correct="true" text="This is option 3" />
  <option id="1.4" correct="false" text="This is option 4" />
</question>
<question id="2" type="check" text="This is question 2" isBranch="true">
  <option id="2.1" correct="true" text="This is option 1" />
  <option id="2.2" correct="false" text="This is option 2" />
  <option id="2.3" correct="true" text="This is option 3" />
</question>
</questions>

Так что это входит в дерево. При изменении я получаю список опций для выбранного вопроса (item..option) - и этот XMLList передается в (пользовательский) компонент. Этот компонент (не уверен, что это лучший способ сделать это, но все же ...) - имеет пару элементов управления Repeater - один связан с XMLList для вопроса о радио, другой связан с XMLList проверки коробочный вопрос. Каждый ретранслятор зацикливает количество опций, помещая TextInput (для редактирования текста опций) и либо радио, либо флажок (в зависимости от типа вопроса)

Итак, что я получаю, когда текст редактируется для параметра, XML в этом TextInput привязывается к XML, который является dataProvider для дерева. Так, например, если «Это вариант 1» изменен на «Это вариант Foo» - дерево обновляется с этим.

Пока мой ретранслятор (например, для радиоприемников) выглядит так

<mx:Repeater id="repeaterRadio" dataProvider="{optionsListRadio}">      
  <mx:TextInput width="359" id="radioText"
     editable="true" enabled="true" text="{repeaterRadio.currentItem.@text}"/>
  <mx:RadioButton id="radioArray"
    data="{repeaterRadio.currentItem.@id}"
    selected="{repeaterRadio.currentItem.@correct=='true'}"/>
</mx:Repeater>

Без привязки работает - все, что я получаю, это предупреждения типа:

warning: unable to bind to property 'text' on class 'XML' (class is not an IEventDispatcher)

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

Так что любые указатели или идеи будут очень благодарны!

Ответы [ 2 ]

0 голосов
/ 06 октября 2009

Просто замените repeaterRadio.currentItem.@text на XML(repeaterRadio.currentItem).@text.

0 голосов
/ 05 декабря 2008

Я думаю, что есть два класса, которые могут помочь преобразовать XML в привязываемый объект, а затем преобразовать обратно в XML, когда пользователь завершит работу, mx.rpc.xml.SimpleXMLDecoder и mx.rpc.xml.SimpleXMLEncoder

...