Компоненты - сервер
Создание нового компонента
Объект-макет компонента на стороне сервера состоит из 2 основных частей: уникального идентификатора (tag) и макета (layoutRoot). Для облегчения создания новых компонентов пакеты duit предоставляют функцию ComponentDescription.
В рамках компонента не рекомендуется явно устанавливать свойство controlled = true и id виджетов - такие виджеты будут обрабатываться как неконтроллируемые, а фиксированное значение id виджета приведет к ошибке создания контроллера.
var ExampleComponent = duit_widget.NewComponentDescription(
"ExampleComponent",
duit_widget.Text(
&duit_attributes.TextAttributes[duit_color.ColorRGBO]{
Data: "Hellow, Duit!",
}, "", false),
)
Разметка данных
Разметка данных в макете виджета - это способ присваивания атрибутам составного компонента значений, которые будут переданных со стороны сервера.
За это отвечае свойство refs объекта атрибутов, которое представляет из себя коллекцию объектов ValueReference.
Объект ValueReference состоит из трех основных частей:
- attributeKey - название свойства атрибута (в примере - data), куда будет помещено значение
- objectKey - ключ свойства в объекте, содержащем данные
- defaultValue - опциональный параметр, который будет использован в случае, если значение не будет найдено
var ExampleComponent = duit_widget.NewComponentDescription(
"ExampleComponent",
duit_widget.Text(
&duit_attributes.TextAttributes[duit_color.ColorRGBO]{
Data: "Hellow, Duit!",
ValueReferenceHolder: duit_attributes.ValueReferenceHolder{
Refs: []*duit_attributes.ValueRef{
{
AttributeKey: "data",
ObjectKey: "text",
DefaultValue: "Hellow, world!",
},
//duit_attributes.Ref("data", "text", "Hellow, world!"), //shortand
},
},
}, common.NO_ID, false),
)
Использование компонентов в верстке
Добавление компонентов в код макета происходит с помощью виджета Component, который принимает в качестве параметров тег целевого компонента и объект, содержащий данные для его заполнения.
duit_widget.Component(
map[string]interface{}{
"text": "Hellow, Duit!",
}, ExampleComponent.Tag, "some_id_value",
)