Как упоминалось выше, элементы типа webtext представляют собой html-текст, формируемый в соответствующей функции (атрибут @proc) в формате JSON. Элементы этого типа служат для произвольного отображения данных на экране. Ниже приведён пример информационной панели (datapanel) c элементом типа webtext.
<?xml version="1.0" encoding="UTF-8"?> <datapanel> <tab id="1" name="Сотрудники и оргструктура"> <element id="20" type="webtext" proc="deps.webtext.examples.addButtonProc.celesta"/> </tab> </datapanel>
Листинг функции addButtonProc:
def addButtonProc(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Функция возвращает html с кнопкой "Добавить"''' # Описание кнопки "Добавить" addButton = { "button": { "@onclick": "gwtWebTextFunc('%s', '1');" % elementId, "span": { "#text": "Добавить" } } } # Описание общей разметки элементов data = { "table": { "tr": { "td": addButton } } } # Описание настроек settings = { "properties": { "event": { "@name": "single_click", "@linkId": "1", "action": { "@show_in": "MODAL_WINDOW", "main_context": "current", "modalwindow": { "@caption": "Заголовок окна", "@height": "800", "@width": "720" }, "datapanel": { "@type": "current", "@tab": "current", "element": { "@id": "20" } } } } } } return JythonDTO(XMLJSONConverter(input = data).parse(), XMLJSONConverter(input = settings).parse())
Процедура, отвечающая за отображение webtext, возвращает две переменные типа xml (в JSON-формате):
-
data – html-код, отображаемый на информационной панели;
-
settings – перечень свойств, которыми обладают отображённые элементы.
В приведённом листинге происходит отображение кнопки «Добавить». При щелчке на нее запускается функция gwtWebTextFunc, с помощью которой запускается действие. Функция имеет два параметра:
-
id – идентификатор элемента (в нашем случае это элемент с id равным elementId, т.е текущий элемент), у которого ищется linkId;
-
linkId – идентификатор обрабатываемого события (у нас linkId = 1).
Само же описание linkId, а также описание соответствующих событий и действий, происходит в переменной settings. В нашем случае, при нажатии на кнопку «Добавить», запускается событие с linkId = 1 («event»: { «@name»: «single_click», «@linkId»: «1» … }), которое в отдельном окне («action»: { «@show_in»: «MODAL_WINDOW» … }), имеющем определенный размер и название («modalwindow»: «@caption»: «Добавление подразделения», «@height»: «800», «@width»: «720» }), отображает элемент с id = 20. Т.е. в новом окне мы увидим тот же элемент с кнопкой «Добавить». Следует отметить, что чаще всего в отдельном окне появляются элементы типа xforms (они же - формы для заполнения). О них будет рассказано позднее.