Пользовательский интерфейс редактора XML в flex - PullRequest
0 голосов
/ 27 апреля 2011

Я хочу создать пользовательский интерфейс редактора 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', 'user') и имена атрибутов ('id', 'country').

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

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

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

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

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

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

                     <VBox>
<tag>                  Label (<tag>)
    <subtag id="1"/>   HBox [ Label (<subtag ) Label(id=") TextInput(1) Label("/>) ]
</tag>                 Label (</tag>)
                     </VBox>
1 голос
/ 27 апреля 2011

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

...