#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
с средствами визуализации элементов для каждого узла. Таким образом, все управляется данными и легко интерпретируется / изменяется.