上面我们介绍了DataType可以用于描述实体数据,就像是数据字典。事实上,DataType不仅仅可以用来描述实体数据,DataType用于为Dorado描述所有数据。几种DataType的继承关系图如下(用于描述实体数据的其实只是最为常用的EntityDataType):
简单的DataType
最上面的DataType用于那些简单的数据类型,例如String、int、boolean等。Dorado中默认已经对下列的数据类型创建了相应的DataType。
名称 | 实现类 | 说明 |
String | Dorado.datatype.StringDataType | 用于描述字符串类型 |
int | Dorado.datatype.PrimitiveIntDataType | 用于描述非空整数类型 |
Integer | Dorado.datatype.IntegerDataType | 用于描述整数类型,可以为null |
float | Dorado.datatype.PrimitiveFloatDataType | 用于描述非空浮点类型 |
Float | Dorado.datatype.FloatDataType | 用于描述浮点类型,可以为null |
boolean | Dorado.datatype.PrimitiveBooleanDataType | 用于描述非空逻辑类型 |
Boolean | Dorado.datatype.BooleanDataType | 用于描述逻辑类型,可以为null |
Date | Dorado.datatype.DateDataType | 用于描述日期类型 |
上述这些DataType都已被预先的注册到了系统当中,只需要直接利用名称引用就可以了。例如下面的代码指定了某文本编辑框对应的数据类型是float。这样,用户将无法在该编辑框中输入非浮点数的内容。
new Dorado.widget.TextEditor({ dataType: "float" });
EntityDataType
EntityDataType是专门用于描述那些实体数据的类型。实体数据类型特指那些包含一到多个子属性的数据类型,在JavaScript中实体数据都是以JSON对象的形式存在的。为了描述实体数据类型中的每一个属性,Dorado提供了专用的属性描述对象——Dorado.PropertyDef。每一个PropertyDef中都包含数据类型、校验规则、显示格式、是否只读等一系列的属性。
var dataTypePhone = new Dorado.EntityDataType({ name: "Phone", PropertyDefs: [ { name: "product", label: "型号", required: true }, { name: "manufacturer", label: "生产商" }, { name: "type", label: "机型", mapValues: [ { key: "A", value: "直板" }, { key: "B", value: "翻盖" }, { key: "C", value: "滑盖" }, { key: "D", value: "旋盖" }, { key: "Z", value: "其它" } ] }, { name: "price", label: "价格", dataType: "float", displayFormat: "¥#,##0.00" }, { name: "length", label: "长", dataType: "float", displayFormat: "0.0mm" }, { name: "width", label: "宽", dataType: "float", displayFormat: "0.0mm" }, { name: "height", label: "高", dataType: "float", displayFormat: "0.0mm" }, { name: "screen", label: "屏幕", dataType: "float", displayFormat: "0.0\"" }, { name: "touchScreen", label: "触摸屏", dataType: "boolean" }, { name: "cpu", label: "CPU" }, { name: "os", label: "操作系统" }, { name: "comment", label: "备注" } ] }); $dataTypeRepository.register(dataTypePhone);
上面的代码定义了一个包含了若干属性信息的DataType。利用此DataType制作出的页面可见Dorado 7 Client Edition提供的dataset.html例子。其界面效果大致如下:
实际开发时,大部分场景下我们都是通过Dorado的IDE定义DataType:
由IDE的属性标签定义DataType的具体属性设置,如下是一个PropertyDef的属性设置:
AggregationDataType
AggregationDataType用于描述集合类数据。
全局DataType
dorado中可以通过model.xml定义全局的DataType,各个页面中就可以直接使用,例如在model.xml中我们定义:
之后在我们的视图文件中,相关控件如果有dataType属性,我们就可以直接使用它:
当然IDE设计器也提供了设置支持,在你打开dataType属性对话框的时候,可以看到选择列表中有一个Models属性列表,里面就包含了你定义的全局的DataType属性:
私有DataType
全局的DataType方便我们重用设置,但是如果在不同的页面有不同个性化设置要求,例如同样是category对象的id,有的页面我们希望显示名称为"ID",有的页面我们希望显示名称为"类型编号",诸如此类的个性化需求,我们都可以直接在Dorado的View中的DataType中设置解决。
首先我们要在View的Model节点添加一个私有的dataType并且设置它的parent属性为对应的全局的DataType:
设置parent属性时,IDE会提供向导设置窗口:
找到全局Models中的对应的DataType并添加上就可以。
接下来我们只要在这个私有的DataType添加一些个性化的设置就可以,例如本例只要添加一个id属性,并设置它的label为"类型编号",其它都不用设置,它会直接从全局的DataType中继承下来。
在很多场景下,如果你只想定义一个给当前页面使用的DataType,而不需要把它设置为公用的DataType,那么你就可以不用在全局的DataType的model.xml文件中定义,在View的当前Models节点下定义DataType就可以了,并通过creatingType属性和对应的POJO建立映射关系
Attachments:
dorado_datatype_preview.png (image/png)
dorado_datatype_design.png (image/png)
dorado_datatype_prop.png (image/png)
global_datatype_1.png (image/png)
global_datatype_2.png (image/png)
global_datatype_3.png (image/png)
private_datatype_1.png (image/png)
private_datatype_2.png (image/png)
private_datatype_3.png (image/png)