# 构件数据格式说明
一个构件数据格式必须是一个符合python的字典数据类型，需要至少包含以下属性

## id
	定义一个构件的名称，含有此属性的构件为命名构件，命名构件可以通过Blocks.getWidgetById获得。
	名称规则：名称由字母数字构成，理论上可以包含汉字，绝对不能包含”."（英文句号）

## widgettype
	定义构件的名称，大部分常用的kivy的widget的类名都可以用，以及kivyblocks扩展的部件

## options
	类构建时的参数，字典数据类型

## subwidgets
	子构件数组，数组中的每个元素也必须是一个符合构件数据格式要求的数据字典，用于定义一个子构件。

## binds
	构件的事件绑定列表，每个构件（和其命名子构件）的任和事件都可以绑定一道多个处理,详细事件绑定请看[事件绑定](./binds.md)

## 其他属性
	非上述属性的其他的字典属性，blocks会试图用此属性值来创建构件，如果成功，则将此构件在当前构件中保存为此属性名称，并可用使用属性名称当变量来调用 Blocks.getWidgetById()函数来获取
	
## 例子

### HELLO
```
		{
			"widgettype":"VBox",
			"options":{},
			"subwidgets":[
				{
					"widgettype":"Title1",
					"options":{
						"text":"Say Hello",
						"i18n":True,
						"size_hint_y":None,
						"height":"py::CSize(2)"
					}
				},
				{
					"widgettype":"Text",
					"options":{
						"text":"Hello KivyBlocks"
					}
				}
			]
		}
```
##### 说明
创建一个VBox类型的构件，VBox创建一个子构件垂直排列的容器，子构件按照顺序从上而下排列，在这个例子中，本VBox容器中放了两个子构件，一个是“title1”的标题1构件，另一个是Text构件，VBox不带参数是表示占满父构件的全部空间。

##### 显示效果
[Hello](../imgs/hello_window.png)

### 服务器来的构件字典数据
```
		{
            "widgettype":"urlwidget",
            "options":{
				"params":{},
                "url":"{{entire_url('ctrl.ui')}}"
            }
		}
```
#### 说明
urlwidget的一个特殊的构件类型
