Appearance
实例
此章节假设你已经看过了渲染器。若你还不了解渲染器是什么,请先阅读该章节。
在扩展插件和扩展函数中,有时你会需要直接获取当前表单实例(Render Instance),它是一个已经实例化的渲染器。在 render 实例中,可以通过提供的函数获取或修改数据。切换表单,启动流程,触发事件,控件取值赋值等都可由其内部 api 触发。
关联
运行平台每一个表单内部都会生成一个独立的 render 实例,不同表单之间的渲染器实例是不相同的,他们只能存在父子关系(如由 openform 指令打开子表单),不存在兄弟上的联系。
下面是一些示例,帮助理解表单间关联:
表单
A
打开了表单B
,那么称A
是B
的父表单,反之则称之为子表单表单
A
启动了流程并且流程内打开了表单B
,此时A
也同样是B
的父表单表单
A
启动了流程并且流程内打开了表单B
,之后切换到了流程表单C
,此时A
也是C
的父表单,且B
表单实例已被销毁(无法被访问)
来源
最常用的方式,在扩展插件内通过 Prop 获取:
ts
const props = defineProps<{
render: CoRender
}>()
const props = defineProps<{
render: CoRender
}>()
如果需要在深层次的子组件获取,通过 inject 更方便:
ts
const render = inject('render')
const render = inject('render')
示例
在渲染器实例中,最常用功能就是获取其他控件的当前值,假设我们在开发一表格插件,需要拿到一个名字叫 primary-ctrl
控件的值:
vue
<script lang="ts" scoped>
const props = defineProps<{
render: CoRender
}>()
onMounted(() => {
const id = props.render.getCtrlValue('primary-ctrl')
// 通过获取到 id 初始化表单数据
await axios.get('/api/table', { params: { id } })
})
</script>
<script lang="ts" scoped>
const props = defineProps<{
render: CoRender
}>()
onMounted(() => {
const id = props.render.getCtrlValue('primary-ctrl')
// 通过获取到 id 初始化表单数据
await axios.get('/api/table', { params: { id } })
})
</script>
通过实例 api 从表单获取控件值并初始化
参考: CoRenderIns
API