索引
HT for Web
提供了属性组件类ht.widget.PropertyView
,用于显示DataModel
数据容器中,当前选中的Data
类型对象的属性,
支持分组、排序和过滤等方式展示属性。另外ht
提供了属性面板插件,
该扩展插件将分组、排序和过滤提供了可视化的组件封装。
通过propertyView = new ht.widget.PropertyView(dataModel);
初始化构建一个属性组件对象,dataModel
参数为属性组件绑定的数据模型,
该模型为空时属性组件构造函数内部将创建一个新的数据模型进行绑定。
属性组件的getPropertyModel()
函数返回属性模型对象,其本质也是个DataModel
类型对象,只不过该对象是仅用于添加ht.Property
类型对象,
ht.Property
类型的父类为ht.Data
,增加了和属性定义相关的函数接口。
因此用户所需要做的工作是,根据要显示的属性信息构建出ht.Property
对象,然后添加到propertyView.getPropertyModel()
函数返回的属性模型,
这样当propertyView.getDataModel()
的数据模型选中图元变化时,当前选中图元Data
的相关属性信息,就会根据propertyView.getPropertyModel()
上存储的ht.Property
对象的配置进行显示。
ht.Property
属性类继承于ht.Data
,不可设置父子关系,具备以下属性函数:
getName()
和setName(name)
用于存取name
属性,该属性结合accessType
属性最终实现对Data
属性的存取getDisplayName()
和setDisplayName(displayName)
用于存取属性名的显示文本值,若为空则显示name
属性值getIcon()
和setIcon('icon')
存取属性名左侧显示的图标getColor()
和setColor(color)
存取属性名的文本颜色getCategoryName
和setCategoryName('name')
设置属性所在分组isEditable()
和setEditable(true/false)
设置该属性是否可编辑,默认为false
isBatchEditable()
和setBatchEditable(true/false)
设置该属性是否允许多选时批量编辑,默认为true
getAccessType()
和setAccessType(type)
操作存取属性类型:null
: 默认类型,如name
为age
,采用getAge()
和setAge(98)
的get/set
或is/set
方式存取style
:如name
为age
,采用getStyle('age')
和setStyle('age', 98)
的方式存取field
:如name
为age
,采用data.age
和data.age = 98
的方式存取attr
:如name
为age
,采用getAttr('age')
和setAttr('age', 98)
的方式存取valueType
值类型用于提示组件提供合适的renderer
渲染,合适的编辑控件,及改变值时必要的类型转换:null
:默认类型,显示为文本方式string
:字符串类型,显示为文本方式boolean
:布尔类型,显示为勾选框color
:颜色类型,以填充背景色的方式显示int
:整型类型,文本编辑器改变值时自动通过parseInt
进行转换number
:浮点数类型,文本编辑器改变值时自动通过parseFloat
转换getAlign()
和setAlign('left'/'center'/'right')
决定以文本方式进行渲染时的水平对齐方式,默认为left
isNullable()
和setNullable(true/false)
决定该属性是否可为空,默认为true
,设置为false
可避免输入null
或undefined
isEmptiable()
和setEmptiable(true/false)
决定属性是否可为空字符串,默认为false
,可避免输入空字符串,空字符串转换成undefined
property.getValue = function(data, property, view){return value}
自定义获取值函数property.setValue = function(data, property, value, view){}
自定义设置值函数property.drawPropertyValue = function(g, property, value, rowIndex, x, y, w, h, data, view)
自定义属性值渲染函数property.drawPropertyName = function(g, property, rowIndex, x, y, w, h, view)
自定义属性名渲染函数property.formatValue = function(value)
一般用于将数字转换更易读的文本格式,可重载自定义property.getToolTip = function(data, isValue, propertyView)
自定义文字提示内容,isValue
代表目前鼠标是否在属性值范围,若不是则在左侧属性名枚举是较为常见的属性编辑选择应用,在编辑时候呈现下拉列表,因此ht
对枚举类型属性考虑了很多应用场景,setEnum(params)
函数即可设置单个的json
参数,
也可以设置逐个的参数信息setEnum(enumValues, enumLabels, enumIcons, enumEditable, enumStrict)
,
以下为常见的案例:
setEnum(['C','C++','JS'])
,传递数值数组 setEnum([1,2,3], ['C','C++','JS'])
,传递数值和文字数组 setEnum([1,2,3], ['C','C++','JS'], ['c_icon', 'c++_icon', 'js_icon'])
,传递数值、文字和图标数组setEnum({values:[1,2,3]})
,传递数值数组setEnum({values:[1,2,3], labels:['C','C++','JS']})
,传递数值和文字数组setEnum({values:[1,2,3], labels:['C','C++','JS'], icons:['c_icon', 'c++_icon', 'js_icon']})
,传递数值、文字和图标数组
ht
内部会自动检测用户是否引入了表单插件,若引入了表单插件的ht.widget.ComboBox
组件则采用之作为编辑器, 否则采用原生html
的select
组件,由于原生html
的select
下拉组件只文本显示,因此上面的很多参数仅对ht.widget.ComboBox
组件起作用。
enumValues
:枚举值数组enumLabels
:枚举文本数组 enumIcons
:枚举图标数组enumEditable
:枚举下拉编辑器是否允许可输入,默认为false
enumStrict
:值匹配时是否采用严格的===
进行比较,默认为true
,若为false
则采用==
进行比较表单插件中的滑动条ht.widget.Slider
也是较为常见和易用的编辑组件,
为此ht
也增加了该类型相应属性的设置,通过getSlider()
和setSlider(parmas)
可指定该属性在编辑状态呈现的滑动条信息。
属性组件类ht.widget.PropertyView
主要可配置属性和函数如下:
isEditable()
和setEditable(true/false)
控制可否编辑的总开关,默认为true
,每个Property
属性可再控制isBatchEditable()
和setBatchEditable(true/false)
控制可否多选时批量编辑总开关,默认为true
,每个Property
属性可再控制isCategorizable
和setCategorizable(true/false)
控制是否分组,默认为true
,为false
则忽略Property
的categoryName
属性getIndent()
和setIndent(20)
控制左侧缩进,左侧空间用于绘制分组toggle
图标,以及属性提示icon
图标getSortFunc()
和setSortFunc(func)
获取和设置属性排序函数getVisibleFunc()
和setVisibleFunc(func)
获取和设置属性过滤器,也可通过PropertyView#isVisible(property)
函数重载getExpandIcon()
和setExpandIcon(icon)
获取和设置分组展开的图标。getCollapseIcon()
和setCollapseIcon(icon)
: 分组合并的图标。getScrollBarColor()
和setScrollBarColor(color)
获取和设置滚动条颜色getScrollBarSize()
和setScrollBarSize(6)
获取和设置滚动条宽度isAutoHideScrollBar()
和setAutoHideScrollBar(true/false)
获取和设置是否自动隐藏滚动条,默认为true
getSelectRowIndex()
和setSelectRowIndex(10)
获取和设置当前选中行索引getSelectBackground(data)
和setSelectBackground(color)
获取和设置行选中背景颜色getBackground()
和setBackground(color)
获取和设置边框和分组行的背景颜色getRowHeight()
和setRowHeight(20)
获取和设置行高isRowLineVisible()
和setRowLineVisible(true/false)
获取和设置行线是否可见,默认为true
getRowLineColor()
和setRowLineColor(color)
获取和设置行线颜色isColumnLineVisible()
和setColumnLineVisible(true/false)
获取和设置列线是否可见,默认为true
getColumnLineColor()
和setColumnLineColor(color)
获取和设置列线颜色getColumnPosition()
和setColumnPosition(0.5)
获取和设置列线位置比例,默认值0.5
,允许范围为0
~1
getRows()
返回当前显示的所有行信息的数组,数组元素为string
类型代表分组名,{data:d,property:p}
结构对象代表属性信息getPropertyName(property)
返回显示在左列的属性名,可重载自定义getLabelFont(property, value, rowIndex)
返回属性值文本字体,可重载自定义getLabelColor(property, value, rowIndex)
返回属性值文本颜色,可重载自定义getPropertyFont(property, rowIndex)
返回属性名文本字体,可重载自定义getPropertyColor(property, rowIndex)
返回属性名文本颜色,可重载自定义getCategoryFont(categoryName)
返回分组文本字体,可重载自定义getCategoryColor(categoryName)
返回分组文本颜色,可重载自定义isExpanded(categoryName)
判断分组是否展开toggle(categoryName)
切换分组的展开和合并expandAll()
展开所有分组expand(categoryName)
展开分组onExpanded(categoryName)
展开分组时回调,可重载做后续处理collapseAll()
合并所有分组collapse(categoryName)
合并分组onCollapsed(categoryName)
合并分组时回调,可重载做后续处理getPropertyModel()
获取propertyModel
属性,其为DataModel
类型,可增删Property
属性对象 getDataModel()
和setDataModel(dataModel)
获取和设置绑定的DataModel
数据模型updateCurrentData()
更新当前要显示属性的Data
类型对象,默认为SelectionModel
最后选中的对象getCurrentData()
获取当前显示对象drawCategoryName(g, name, rowIndex, x, y, w, h)
绘制分组名,可重载自定义drawPropertyName(g, property, rowIndex, x, y, w, h)
绘制属性名,可重载自定义drawPropertyValue(g, property, value, rowIndex, x, y, w, h, data)
绘制属性值,可重载自定义isPropertyEditable(property)
判断属性是否可编辑,可重载自定义getRawProperties()
返回要显示的原始未过滤排序的属性ht.List
集合,默认返回propertyModel.getRoots()
,可重载自定义getRowIndexAt(event)
返回event
事件所在的行索引getPropertyAt(event)
返回event
事件所在的行的属性信息enableToolTip()
和disableToolTip()
开启和关闭文字提示isDisabled()
和setDisabled(true/false, iconURL)
可获取和设置整个组件处于不可用状态addTopPainter(func)
和removeTopPainter(func)
增加和删除顶层绘制器function(g){...}
addBottomPainter(func)
和removeBottomPainter(func)
增加和删除底层绘制器function(g){...}
addProperties(array)
用json
的数组参数方式批量添加属性信息setProperties(array)
用json
的数组参数方式批量添加属性信息,参数为空时代表清空目前所有属性PropertyView
提供了addProperties
和setProperties
的函数,可通过json
格式较容易的批量添加Property
属性,上例采用了如下的代码方式:
propertyView.addProperties([
{
name: 'name',
displayName: 'Name'
},
{
displayName: 'CPU',
drawPropertyValue: function(g, property, value, rowIndex, x, y, w, h, data, view) {
drawFunc(g, data.a('cpu'), x, y, w, h);
},
getToolTip: function(data, isValue, propertyView){
return isValue ? data.a('cpu') + '%' : 'CPU usage percentage';
}
},
{
displayName: 'MEM',
drawPropertyValue: function(g, property, value, rowIndex, x, y, w, h, data, view) {
drawFunc(g, data.a('mem'), x, y, w, h);
},
getToolTip: function(data, isValue, propertyView){
return isValue ? data.a('mem') + '%' : 'Memory usage percentage';
}
}
]);
以上例子在定义CPU
和MEM
的Property
时,未指定任何name
和accessType
的信息,因为他们都定义了drawPropertyValue函数,
因此ht
内部无需获取值的配置信息,但这也带来了另外的问题,当propertyView.enableToolTip()
后,ht
内部无法获取到值信息进行提示,
因此该例子中在定义CPU
和MEM
的Property
时,都定义了getToolTip函数进行自定义。
例子中呈现指标时当百分比值在0~40
之间采用绿色,40~70
之间采用黄色,70~100
之间采用红色,因此定义了getColor
的统一颜色转换函数,
同时drawPropertyValue
的自定义函数也都调用了drawFunc
的统一百分比绘制函数。
getColor = function(value) {
if (value < 40)
return '#00A406';
if (value < 70)
return '#FFCC00';
return '#A60000';
};
drawFunc = function(g, value, x, y, w, h){
g.fillStyle = '#A1A1A3';
g.beginPath();
g.rect(x, y, w, h);
g.fill();
g.fillStyle = getColor(value);
g.beginPath();
g.rect(x, y, w * value / 100, h);
g.fill();
ht.Default.drawText(g, value + '%', '12px Arial', 'white', x, y, w, h, 'center');
};