6.2 KiB
6.2 KiB
bricks.uiViewers 模块技术文档
概述
bricks.uiViewers 是一个基于工厂模式的 UI 视图构建系统,用于根据不同的数据类型(uitype)动态创建对应的 UI 组件。该模块通过注册和获取视图构建器函数,实现对多种数据类型的可视化展示。
它适用于需要根据配置动态渲染字段内容的场景(如表单预览、数据展示等),支持字符串、图标、代码、密码、隐藏字段、音频等多种类型。
命名空间结构
var bricks = window.bricks || {};
bricks.uiViewers = {};
bricks:全局命名空间对象,防止污染全局作用域。bricks.uiViewers:存储所有已注册的视图构建器函数的对象,键为uitype,值为构建函数。
核心方法
bricks.add_ViewBuilder(uitype, handler)
注册一个新的视图构建器。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
uitype |
String |
数据/字段类型的标识符(如 'str', 'icon' 等)。 |
handler |
Function |
构建 UI 组件的处理函数,接收 opts 配置对象并返回一个组件实例。 |
示例
bricks.add_ViewBuilder('str', function(opts){
return new bricks.Text({ otext: opts.value });
});
此方法将指定的
handler存入bricks.uiViewers对象中,以uitype为键。
bricks.get_ViewBuilder(uitype)
获取已注册的视图构建器函数。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
uitype |
String |
要获取的构建器对应的类型名称。 |
返回值
{Function|null}:如果存在对应uitype的构建器,则返回该函数;否则返回undefined。
示例
var builder = bricks.get_ViewBuilder('str');
if (builder) {
var widget = builder({ value: 'Hello' });
}
内置视图构建器
以下为默认注册的几种常见类型及其行为说明。
'str' - 字符串显示
使用 bricks.Text 组件显示普通文本,并支持国际化(i18n)。
构建逻辑
bricks.add_ViewBuilder('str', function(opts){
var options = bricks.extend({}, opts);
options.otext = opts.value;
options.i18n = true;
return new bricks.Text(options);
});
说明
- 复制原始
opts配置。 - 设置显示文本为
opts.value。 - 启用国际化支持。
'icon' - 图标显示
显示一个图标组件,通常基于 URL 或类名。
构建逻辑
bricks.add_ViewBuilder('icon', function(opts){
var options = bricks.extend({}, opts);
options.url = opts.value;
return new bricks.Icon(options);
});
说明
- 将
value字段作为图标的资源地址(URL)传入bricks.Icon。
'code' - 代码/富文本显示
用于显示可配置字段的文本内容,优先从 user_data 中提取。
构建逻辑
bricks.add_ViewBuilder('code', function(opts){
var textField = opts.textField || 'text';
var valueField = opts.name;
var txt;
if (opts.user_data) {
txt = opts.user_data[textField] || opts.user_data[valueField] || '';
} else {
txt = opts.value || '';
}
var options = bricks.extend({}, opts);
options.otext = txt;
options.i18n = true;
return new bricks.Text(options);
});
说明
- 支持从
user_data对象中读取内容,优先级:textField > valueField > fallback ''。 - 若无
user_data,则使用opts.value。 - 使用
bricks.Text显示结果,并启用 i18n。
'password' - 密码占位显示
安全地显示密码字段,仅展示掩码。
构建逻辑
bricks.add_ViewBuilder('password', function(opts){
var options = bricks.extend({}, opts);
options.otext = '******';
options.i18n = true;
return new bricks.Text(options);
});
说明
- 实际值不暴露,统一显示为六个星号
******。 - 仍使用
bricks.Text组件进行渲染。
'hide' - 隐藏字段
创建一个空的占位组件,不显示任何内容。
构建逻辑
bricks.add_ViewBuilder('hide', function(opts){
return new bricks.JsWidget({});
});
说明
- 返回一个空的
JsWidget实例,用于占位但不可见。 - 常用于逻辑控制或后台数据绑定。
'audio' - 音频播放器
嵌入一个音频播放控件,支持自动播放开关。
构建逻辑
bricks.add_ViewBuilder('audio', function(opts){
var options = bricks.extend({}, opts);
var url = options.value;
return new bricks.AudioPlayer({ url: url, autoplay: false });
});
说明
- 从
opts.value提取音频文件 URL。 - 创建
AudioPlayer实例,默认禁用自动播放。
扩展性与自定义
开发者可通过 bricks.add_ViewBuilder 方法扩展新的字段类型支持。
自定义示例
bricks.add_ViewBuilder('image', function(opts) {
return new bricks.Image({
src: opts.value,
alt: opts.label || 'Image'
});
});
只需确保
uitype不冲突即可无缝集成。
依赖说明
本模块依赖以下 bricks 子模块:
| 模块 | 用途 |
|---|---|
bricks.extend |
对象浅拷贝工具函数(类似 jQuery.extend)。 |
bricks.Text |
文本显示组件。 |
bricks.Icon |
图标显示组件。 |
bricks.JsWidget |
基础 UI 容器组件。 |
bricks.AudioPlayer |
音频播放组件。 |
确保这些组件在运行时已加载。
使用示例
// 获取构建器
var builder = bricks.get_ViewBuilder('str');
// 创建组件
var textWidget = builder({ value: 'Hello World' });
// 插入 DOM
textWidget.renderTo(document.body);
总结
| 特性 | 说明 |
|---|---|
| 设计模式 | 工厂模式 + 注册中心 |
| 可扩展性 | 高,支持动态添加新类型 |
| 安全性 | 敏感信息(如密码)做了脱敏处理 |
| 灵活性 | 支持从不同数据源提取内容(如 user_data) |
此模块是构建动态 UI 展示层的核心组件之一,适合用于低代码平台、表单引擎、CMS 内容预览等场景。