太牛了!低代码表单设计器之表单组件事件机制 —— 组件交互

还在为低代码表单里组件联动逻辑混乱代码耦合严重头疼?选了选项才显示输入框、根据选择自动设必填、动态改标题、禁用组件…… 传统配置方式要么逻辑杂乱,要么扩展性极差!

今天给大家推荐基于 MVVM 架构开源表单设计器 unione-form-editor,它彻底重构了组件交互逻辑:事件只处理数据组件自己控制自己,用最简洁、最规范的方式实现复杂表单联动,新手也能轻松上手!


一、核心亮点:MVVM 架构 + 纯数据驱动事件机制

unione-form-editor 基于MVVM 架构设计,这是它组件交互远超其他低代码平台的关键:

  • 遵循数据驱动视图理念,事件不直接操作 DOM / 组件,只负责更新表单数据;
  • 显示、隐藏、必填、标题、禁用等视图控制,全部由组件自身的事件独立处理
  • 核心依托 ctx 上下文变量完成数据读写,实现数据与视图完全解耦。

1. 核心事件分工(严格遵循 MVVM)

事件类型 作用 核心规则
变化事件 / 失去焦点事件 / 点击事件 仅处理数据 只修改 ctx 中的数据,不控制其他组件的显示 / 隐藏 / 必填
显示事件 控制组件显示 / 隐藏 编写逻辑返回 true 显示,false 隐藏
必填事件 控制组件是否必填 编写逻辑返回 true 必填,false 非必填
标题事件 动态设置组件标题 直接 return 字符串,动态更新标题
禁用事件 控制组件是否禁用 编写逻辑返回 true 禁用,false 启用

2. 万能上下文:ctx 变量

unione-form-editor 的 ctx 是表单数据中心,所有交互都围绕它展开:

  • 读取数据ctx.字段名,如 ctx.jobType 获取职业类型
  • 修改数据ctx.字段名 = 值,如 ctx.age = 20 直接赋值
  • 所有组件的视图状态,都由 ctx 数据决定,完全实现数据驱动视图

二、实战案例:MVVM 模式实现学员表单智能交互

我们用最经典的学员信息采集表单,带你彻底掌握 unione-form-editor 的事件机制!

场景需求

表单组件:

  1. jobType:职业类型下拉框(学生 / 上班族 / 其他)
  2. studentId:学号输入框
  3. otherJob:其他职业说明输入框

交互规则(严格 MVVM 实现):

  1. 选择「学生」→ studentId 显示 + 必填,下拉框标题变为「当前身份:学生」
  2. 选择「其他」→ otherJob 显示 + 必填
  3. 选择「上班族」→ 两个输入框全部隐藏 + 非必填,下拉框恢复默认标题
  4. 学号输入框失去焦点,自动校验格式(仅修改数据)

步骤 1:配置「变化事件」—— 只做数据处理

找到 jobType 组件 → 配置变化事件:✅ 遵循 MVVM:只更新数据,不控制任何组件视图

javascript

运行

// 变化事件:仅处理数据,不操作组件显示/隐藏
// 选择切换时,清空对应输入框数据(纯数据处理)
// 字典  1学生,2上班族,3其他
if(ctx.jobType !== 1){
  ctx.studentId = '';
}

步骤 2:配置「失去焦点事件」—— 纯数据校验

找到 studentId 组件 → 配置失去焦点事件

javascript

运行

// 仅校验并修改数据,不控制任何组件状态
const reg = /^\d{10}$/;
if(ctx.studentId && !reg.test(ctx.studentId)){
  alert('学号必须为10位数字');
  ctx.studentId = ''; // 仅清空数据
}

步骤 3:配置「显示事件」—— 组件自己控制自己

studentId 显示事件

javascript

运行

// 根据ctx数据,返回true显示、false隐藏
// 字典  1学生,2上班族,3其他
return ctx.jobType === '1';
otherJob 显示事件

javascript

运行

// 根据ctx数据,返回true显示、false隐藏
// 字典  1学生,2上班族,3其他
return ctx.jobType === '3';

步骤 4:配置「必填事件」—— 组件自主控制校验

studentId 必填事件

javascript

运行

// 仅根据数据返回是否必填
// 字典  1学生,2上班族,3其他
return ctx.jobType === 1;
otherJob 必填事件

javascript

运行

// 仅根据数据返回是否必填
// 字典  1学生,2上班族,3其他
return ctx.jobType === 3;

步骤 5:配置「标题事件」—— 动态返回标题

找到 jobType 组件 → 配置标题事件

javascript

运行

// 动态返回组件标题
// 字典  1学生,2上班族,3其他
if(ctx.jobType === 1){
  return '当前身份:学生';
}
return '职业类型';

三、效果一览:标准 MVVM 交互极致流畅

  1. 默认状态:两个输入框全部隐藏,标题为「职业类型」
  2. 选择「学生」:学号输入框自动显示 + 必填,标题同步更新
  3. 选择「其他」:其他职业输入框自动显示 + 必填
  4. 选择「上班族」:所有输入框隐藏、非必填,标题恢复默认
  5. 输入错误学号 → 失去焦点自动提示并清空数据

整个过程无冗余代码、无组件耦合、无硬编码操作,这就是 MVVM 架构的强大之处!


四、unione-form-editor 事件机制核心优势

  1. 架构规范:基于 MVVM,数据与视图分离,易维护、易扩展
  2. 逻辑清晰:谁的状态谁管理,不会出现一处代码控制全表组件
  3. 上手简单:只会写数据逻辑也能做复杂交互,新手零门槛
  4. 场景全覆盖:显示 / 隐藏、必填 / 非必填、动态标题、禁用 / 启用、数据校验、自动计算全部支持
  5. 开源免费:完全开源,可二次定制、商用无压力

结语

        unione-form-editor 依托 MVVM 架构打造的组件事件机制,摒弃了传统表单设计器的冗余耦合逻辑,变化事件、失去焦点事件仅专注数据处理,显示、必填、标题等事件由组件自主控制并返回对应状态,真正实现数据驱动视图。无论是订单管理、财务系统、统计报表还是业务审批,都能以极简配置搭建高可用、高扩展性的表单应用,让你无需编写复杂代码,即可快速落地各类复杂交互场景。

        目前项目已在 GitHub、Gitee 开源,欢迎前往点亮 Star,获取完整源码、查看详细教程,参与社区共建,一起打造更强大的低代码表单设计工具!

        GitHub 项目地址https://github.com/unione-cloud/unione-form-editor

        Gitee 项目地址https://gitee.com/unione-cloud/unione-form-editor

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐