Onecode 可视化动作揭秘系列二:组件类型个性化配置技术协议
Onecode 可视化动作揭秘系列二:组件类型个性化配置技术协议
本文将深入剖析 OneCode 平台如何为不同类型的目标组件提供个性化配置的核心技术实现,揭秘其灵活且强大的动作配置机制。
一、组件类型识别与动作映射架构
OneCode 通过一套完整的类型识别和动作映射架构,实现了针对不同组件类型的个性化配置能力。核心实现在 ActionsEditor.js 文件中的 _buildsubtree
方法,该方法根据组件类型动态构建可用动作列表。
_buildsubtree: function (item) {if (!item["0"]) {if (item.key && item.key != 'ood.Module') {var component = ood.create(item.key).setAlias(item.alias).setProperties(item.properties)item["0"] = component["n0"];item._type = "control";} else if (item.className && item.className != SPA.currentClassName) {item._type = "otherModuleCall";} else if (item.id && item.id == SPA.currentClassName) {item._type = "page";}}// ... 根据组件类型构建具体动作列表
}
类型识别机制
OneCode 将组件分为三大基本类型:
- control 类型:页面内的具体控件组件
- page 类型:整个页面模块
- otherModuleCall 类型:其他模块调用
在此基础上,系统还会进一步识别组件的具体实现类型(如 ood.MQTT、ood.APICaller、ood.DataBinder 等),为每种类型提供量身定制的操作选项。
二、组件类型与个性化动作的映射关系
OneCode 为每种组件类型定义了特定的可用动作集合,这些集合包括通用操作和特定于组件
类型的操作。
1. MQTT 组件的个性化配置
对于 MQTT 组件,系统提供了与其通信特性完全匹配的操作选项:
if (item["0"].key == "ood.MQTT") {items = [{id: "none",caption: "$RAD.action." + map2["none"],imageClass: 'ri-forbid-2-line',cat: "none"}, {id: "setProperties",cat: 'prop',caption: "$(RAD.action." + map2["setProperties"] + ")"}, {id: "connect",cat: 'callcb',redirection: 'other:callback:call',_tpl: "{page.*.connect()}",caption: "$(RAD.action." + map2["connect"] + ")","0": item["0"]},// ... 其他MQTT特有操作:disconnect、subscribe、unsubscribe、publish等
}];
2. API调用器组件的个性化配置
API调用器组件则专注于数据请求和调用操作:
else if (item["0"].key == "ood.APICaller") {items = [{id: "none",caption: "$RAD.action." + map2["none"],imageClass: 'ri-forbid-2-line',cat: "none"}, {id: "setProperties",cat: 'prop',caption: "$(RAD.action." + map2["setProperties"] + ")"}, {id: "setQueryData",cat: 'callcb',redirection: 'other:callback:call',_tpl: "{page.*.setQueryData()}",caption: "$(RAD.action." + map2["setQueryData"] + ")"}, {id: "invoke",cat: 'callcb',redirection: 'other:callback:call',_tpl: "{page.*.invoke()}",caption: "$(RAD.action." + map2["invoke"] + ")"}// ... 其他API调用器特有操作
}];
3. 数据绑定组件的个性化配置
数据绑定组件则提供了丰富的数据操作能力:
else if (item["0"].key == "ood.DataBinder") {items = [{id: "none",caption: "$RAD.action." + map2["none"],imageClass: 'ri-forbid-2-line',cat: "none"}, {id: "setProperties",cat: 'prop',caption: "$(RAD.action." + map2["setProperties"] + ")"}, {id: "updateValue",cat: 'none',caption: "$(RAD.action." + map2["updateValue"] + ")"},// ... 其他数据绑定特有操作:resetValue、clearValue、updateDataFromUI、updateDataToUI等
}];
三、动作分类与参数配置系统
OneCode 通过 cat
属性将动作分为不同类别,每种类别对应不同的参数配置界面:
动作类别 | 描述 | 适用场景 |
---|---|---|
prop | 属性设置 | 配置组件的基本属性 |
callcb | 回调调用 | 调用组件提供的方法并处理返回值 |
con | 条件操作 | 需要额外条件参数的操作 |
mix | 混合配置 | 需要复杂参数组合的操作 |
none | 简单操作 | 无需额外参数的操作 |
url | 链接操作 | 页面跳转相关操作 |
animate | 动画操作 | 组件动画效果配置 |
log | 日志操作 | 日志记录相关配置 |
参数配置示例
在 ModuleConfig.js 中,我们可以看到具体的动作配置示例:
{"args": ["{page.getValue()}"],"desc": "动作 1","method": "setFormValues","target": "ood_ui_div31","type": "control"
},
{"args": ["{page.tableName.setUIValue()}",null,null,"{page.properties.tableName}"],"conditions": [{"symbol": "defined","right": "","left": "{page.properties.tableName}"},{"symbol": "non-empty","right": "","left": "{page.properties.tableName}"}],"desc": "动作 2","method": "setUIValue","redirection": "other:callback:call","target": "tableName","type": "control"
}
四、复杂组件的高级配置能力
对于 TreeGrid 这类复杂组件,OneCode 提供了极其丰富的操作选项,涵盖了单元格操作、行操作、列操作等多个维度:
else if (prf.box["ood.UI.TreeGrid"]) {items.push({type: 'split'});items.push({id: "isDirtied",cat: 'none',caption: "$(RAD.action." + map2["isDirtied"] + ")","0": item["0"]});items.push({id: "updateGridValue",cat: 'none',caption: "$(RAD.action." + map2["updateGridValue"] + ")","0": item["0"]});// ... 大量表格相关操作:单元格操作、行操作、列操作等
}
五、多语言支持与国际化设计
OneCode 的动作配置系统采用了国际化设计,通过多语言映射实现界面文本的本地化:
var map2 = this.CAPMAP.action;
// ...
caption: "$RAD.action." + map2["setProperties"]
CAPMAP 对象定义了动作组和具体动作的多语言映射关系,使得整个配置系统可以轻松支持多种语言环境。
六、技术价值与应用场景
OneCode 的组件类型个性化配置技术具有以下核心价值:
- 提升开发效率:通过可视化配置界面,开发者无需编写大量重复代码
- 降低学习成本:针对不同组件类型提供符合其特性的操作选项,减少开发者学习负担
- 保证配置准确性:根据组件类型动态过滤可用操作,避免配置错误
- 增强系统扩展性:模块化的设计使得系统可以轻松支持新的组件类型
典型应用场景
- 页面交互逻辑配置:为按钮、链接等控件配置点击事件
- 数据流转控制:配置数据在不同组件间的传递和转换
- 复杂业务流程实现:通过组合不同组件的操作构建业务流程
- 动态界面控制:根据条件动态改变界面元素的状态和行为
七、总结
OneCode 通过精心设计的组件类型识别机制、动作映射架构和参数配置系统,实现了对不同类型目标组件的个性化配置支持。这一技术不仅提升了开发效率,降低了开发难度,还保证了配置的准确性和系统的扩展性,为可视化开发提供了坚实的技术基础。
该技术协议的核心在于将组件类型与其特性操作进行精确映射,并通过分类明确的参数配置界面,使得复杂的组件交互配置变得简单直观,真正实现了"所见即所得"的可视化开发体验。