Пользовательский интерфейс редактора XML в flex

#xml #apache-flex #actionscript-3

#xml #apache-flex #actionscript-3

Вопрос:

Я хочу создать пользовательский интерфейс редактора xml в flex. По сути, я хочу представить xml в текстовом поле.Затем пользователи могут отредактировать XML-файл и сохранить его в базе данных.Кроме того, в зависимости от привилегий вошедшего в систему пользователя уровень разрешенного редактирования варьируется.Обычный пользователь может редактировать значения атрибутов, а также значения узлов, но не имена атрибутов и не названия узлов.

Например: рассмотрим этот XML

 <users>
    <user id="1" country="aaaa">XASD</user>
    <user id="2" country="aaaa6">XASQWED</user>
    <user id="3" country="aaaa4">XASDRQQ</user>
</users>
  

Обычный пользователь может редактировать только значения идентификаторов(‘1′,’2′,’3’), значения стран (‘aaaa’, ‘aaaa6’, ‘aaaa4’) и имена пользователей (‘XASD’, ‘XASQWED’, ‘XASDRQQ’).Но не имена узлов (‘users’, ‘пользователь’) и имена атрибутов (‘id’, ‘country’).

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

Есть идеи, как добиться такого выборочного редактирования (в текстовой области?)?

Ответ №1:

Вероятно, это будет слишком сложно сделать в текстовой области:

  • Подкласс TextArea для доступа к защищенному IUITextField
  • Самостоятельно проанализируйте XML, чтобы определить, в каких позициях текст доступен для редактирования, а в каких нет
  • Передавайте события ИЗМЕНЕНИЯ из текстового поля при выборе в редактируемой области и предотвращайте их в противном случае
  • Повторный анализ XML / обновление позиций после каждого изменения

Работа с текстовыми позициями таким образом может быть очень подвержена ошибкам. Рассмотрим другой подход:
представьте свой XML в пользовательском макете, где не редактируемыми частями являются метки или тексты, а редактируемыми — текстовые поля. Отдельным тегом может быть HBox, заполненный этими элементами управления FlowLayout в Flex4. Текстовые поля должны проверять свое содержимое, чтобы сохранить XML действительным.
Чтобы создать редактор, выполните итерацию тегов / атрибутов, создайте элементы управления. Чтобы вернуть XML, повторите элементы управления, смотря по их типу, и создайте теги / атрибуты. Единственное, что вы теряете, это выделение текста в нескольких тегах / строках.
Обновление: На самом деле, это должно быть довольно тривиально сделать:

                      <VBox>
<tag>                  Label (<tag>)
    <subtag id="1"/>   HBox [ Label (<subtag ) Label(id=") TextInput(1) Label("/>) ]
</tag>                 Label (</tag>)
                     </VBox>
  

Комментарии:

1. Хммм … Похоже, меня ждут трудные дни ..:):)

Ответ №2:

Лично я бы не стал использовать «текстовый редактор», слишком много работы, чтобы пытаться ограничить то, к чему вы не хотите, чтобы пользователь прикасался. На вашем месте я бы создал DataGroup с средствами визуализации элементов для каждого узла. Таким образом, все управляется данными и легко интерпретируется / изменяется.