getDataSource()
dataChange
事件,并将数据源作为载荷传入setValue(value)
getValue()
change
事件,并将当前值作为载荷传入;若当前值是第一次设置,会额外触发 ready
事件setBusy(busy)
getBusy()
busyChange
事件,并将当前是否忙碌作为载荷传入getSearchContext()
load()
reload()
totalChange
事件,并将数据总条数作为载荷传入setCurrentPage(current)
getCurrentPage()
currentPageChange
事件,并将页码作为载荷传入setPageSize(size)
getPageSize()
pageSizeChange
事件,并将每页条数作为载荷传入getList(params, success?, fail?)
deleteOne(params, success?, fail?)
deleteList(params, success?, fail?)
getParent()
setFieldValue(name, value)
getFieldValue(name)
fieldChange
事件,并将被设置的字段键与值组合成对象作为载荷传入submit()
submit
事件进行后续处理reset()
reset
事件,并将重置后的值作为载荷传入getOne(params, success?, fail?)
insert(data, success?, fail?)
update(data, success?, fail?)
在渲染部件时已经将视图上下文注入进去,在视图部件、字段部件和动作部件中可通过 this.context
访问,在搜索部件和过滤器部件中则用 this.viewContext
获取。
模块上下文提供了访问模块级别资源的能力,这些资源都是通过模块描述器进行声明的。
模块上下文不能直接获取,需要经视图上下文的 getModuleContext()
方法间接访问,其 API 为:
方法 | 说明 |
---|---|
getModuleName() | 获取模块名 |
getModel() | 获取模块绑定的模型定义 |
getDependencies(refPath?) | 获取当前模块所依赖的其他模块资源 |
getComponents() | 获取模块所使用的控件的构造函数 |
execute(actionName, params?, success?, fail?) | 执行服务端动作,当所执行动作不需要传参时,第二个参数为逻辑成功的回调,第三个参数为逻辑失败的回调 |
搜索上下文是用来维护列表类视图的过滤条件的,有着与对象类视图上下文相似的 API:
方法 | 说明 |
---|---|
setValue(value) getValue() | 获取/设置全部过滤条件 设置过滤条件后会触发 change 事件,并将全部过滤条件作为载荷传入;若是第一次设置,会额外触发 ready 事件 |
setFilterValue(name, value) getFilterValue(name) | 设置/获取过滤器值 设置过滤器值后会触发 filterChange 事件,并将被设置的过滤器键与值组合成对象作为载荷传入 |
submit() | 提交过滤条件,具体是如何处理被提交的过滤条件,需要外部监听 submit 事件进行后续处理 |
reset() | 重置过滤条件到默认值 重置后会触发 reset 事件,并将重置后的值作为载荷传入 |
在搜索部件中可用 this.context
直接访问搜索上下文,其他情况需通过列表类视图上下文的 getSearchContext()
方法进行获取。
看过《编写模块》中的「视图定义」的话,可得知能够通过视图描述器的 renderType
和 widget
这两个属性去指定想要渲染的部件——widget
用于模块级与视图级的部件,而 renderType
则用于其他级别的,它们不可同时使用。
上述两个属性不是视图描述器所特有的,字段、动作、搜索和过滤器的描述器都有它们,故而都可指定想要渲染的部件!
在自定义部件时要注意部件的命名,尤其是公司级、部门级和项目级的,需要遵照一定的命名规则才能在赋值给 renderType
属性时被查找到。
虽然不同种类的部件在命名上有所差异,但它们的基本模式是 渲染类型 + 部件种类 + Widget
。
在给部件命名时 渲染类型
和 部件种类
都是大驼峰式(Pascal Case),但在赋值给描述器的 renderType
属性时,需要将 渲染类型
变为肉串式(Kebab Case)。
视图、动作和搜索部件的命名与基本模式一致;字段部件的命名模式是 渲染类型 + 编辑状态 + 数据类型 + 部件种类 + Widget
;而过滤器部件则是 渲染类型 + 数据类型 + 部件种类 + Widget
。
示例如下表所示:
种类 | 命名 | 说明 |
---|---|---|
视图 | TableViewWidget | 表格视图部件 |
FormViewWidget | 表单视图部件 | |
字段 | InputEditStringFieldWidget | 用于字符串数据的输入框编辑态字段部件 |
InputReadStringFieldWidget | 用于字符串数据的输入框只读态字段部件 | |
SwitchEditBooleanFieldWidget | 用于布尔型数据的开关编辑态字段部件 | |
SwitchReadBooleanFieldWidget | 用于布尔型数据的开关只读态字段部件 | |
动作 | ButtonActionWidget | 按钮动作部件 |
LinkActionWidget | 链接动作部件 | |
搜索 | FormSearchWidget | 表单搜索部件 |
过滤器 | InputStringFilterWidget | 用于字符串数据的输入框过滤器部件 |
SelectEnumFilterWidget | 用于枚举数据的下拉列表过滤器部件 |
需要说明的是,要严格遵守命名规则的是部件在被 export
导出并被注册进系统中时的名字。
由于部件有很多种,这里就不一一讲述,只拿会被自定义频率较高的字段部件稍作演示——
用于字符串数据的输入框编辑态字段部件:
用于字符串数据的输入框只读态字段部件:
上面所示的是项目级部件的写法,通过字段描述器的 renderType
属性指定;若要自定义模块级或视图级的用字段描述器的 widget
属性指定的部件,则编辑态和只读态都是同一个部件:
更多部件的自定义请见《部件基类》。
TBD
TBD