bricks/docs/cn/views.md
2025-10-12 17:59:59 +08:00

6.0 KiB
Raw Blame History

以下是为提供的代码编写的 Markdown 格式技术文档,清晰地描述了代码的功能、结构、类与函数说明,并对 uitype 类型进行了归纳。


技术文档UI 类型视图系统View System

概述

本模块实现了一个基于 JavaScript 的轻量级 UI 视图渲染系统,用于根据不同的字段类型(uitype)生成对应的显示组件。系统支持多种数据类型的可视化展示,如字符串、密码、数字、邮箱等,并通过注册机制将特定 uitype 映射到对应的视图类。

该系统适用于表单字段、数据展示界面或低代码平台中的动态 UI 渲染场景。


支持的 uitype 类型

以下为系统预定义并可扩展的字段类型(uitype),用于控制如何渲染数据:

uitype 说明
str 普通字符串,直接显示文本内容
password 密码字段,显示为 **** 隐藏实际值
int 整数类型(暂未实现具体视图)
float 浮点数类型(暂未实现具体视图)
tel 电话号码(暂未实现具体视图)
email 邮箱地址(暂未实现具体视图)
file 文件上传/链接(暂未实现具体视图)
'check 布尔检查框(可能为拼写错误,应为 checkcheckbox
checkbox 复选框(布尔值)
date 日期类型(暂未实现具体视图)
text 多行文本(暂未实现具体视图)
code 代码块显示(暂未实现具体视图)
video 视频媒体(暂未实现具体视图)
audio 音频媒体(暂未实现具体视图)

注:当前仅实现了 strpassword 两种类型的视图组件。


核心 API 说明

ViewStr(desc) → Widget

创建一个用于显示字符串字段的文本组件。

参数

  • desc (Object): 字段描述对象,包含以下属性:
    • value (string): 要显示的字符串值。
    • row_data (optional, any): 关联的原始行数据(可用于后续交互)。

返回值

  • Widget: 一个 Text 类型的 UI 组件,左对齐显示文本。

示例

var widget = ViewStr({ value: "Hello World", row_data: { id: 1 } });
// 渲染出显示 "Hello World" 的文本组件

内部逻辑

  • 使用 Text({ text: ..., halign: 'left' }) 创建文本控件。
  • desc.row_data 存在,则将其附加到返回组件的 data 属性上,便于后续操作。

⚠️ 注意:当前版本中 w.desc_object = desc;ViewStr 中设置的是 desc_object,而在 ViewPassword 中是 data,建议统一命名以避免混淆。


ViewPassword(desc) → Widget

创建一个用于显示密码字段的安全文本组件,隐藏真实值。

参数

  • desc (Object): 字段描述对象,包含以下属性:
    • value (string): 实际密码值(不会显示)。
    • row_data (optional, any): 关联的原始行数据(可用于点击后查看明文或其他行为)。

返回值

  • Widget: 一个显示 "****"Text 组件,左对齐。

示例

var widget = ViewPassword({ value: "secret123", row_data: userRecord });
// 显示为 "****",保护隐私

内部逻辑

  • 文本固定显示为 "****",防止泄露密码。
  • 若存在 row_data,则挂载至组件 data 属性,可用于事件回调。

uitypesdef.setViewKlass(uitype, viewClass)

注册指定 uitype 对应的视图构造函数。

示例用法

uitypesdef.setViewKlass('str', ViewStr);

str 类型字段的视图类设置为 ViewStr

此方法属于外部依赖 uitypesdef 对象,需确保其已全局可用。


类定义

class ViewType extends JsWidget

所有视图类的基类,继承自 JsWidget

构造函数

constructor(opts)

调用父类构造函数,初始化基础组件选项。

当前无额外逻辑,作为扩展基类使用。


class ViewStr extends ViewType

str 类型字段的具体视图类(目前为空实现,功能由工厂函数完成)。

⚠️ 当前存在不一致:ViewStr 同时以函数和类的形式出现,可能导致命名冲突或维护困难。

建议改进

  • 移除 ViewStr 函数,完全使用类构造;
  • 或重命名函数为 createViewStr,保持类名唯一性。

设计问题与改进建议

问题 描述 建议
1. 工厂函数与类同名 ViewStr 既是函数又是类,易造成混淆 区分命名,例如函数改为 createViewStr()
2. 属性命名不一致 ViewStr 设置 desc_objectViewPassword 设置 data 统一为 datasourceDesc
3. 'check 类型异常 类型名以单引号开头,可能是笔误 应修正为 checkswitch
4. 缺乏事件处理 所有视图均为静态显示 可添加点击显示密码等功能
5. 未实现多数 uitype 列出 13 种类型但仅实现 2 种 应逐步补全或标记为“待实现”

使用示例

// 显示用户名
const nameField = { value: "Alice", row_data: userData };
const nameLabel = ViewStr(nameField);

// 显示密码(隐藏)
const pwdField = { value: "p@ssw0rd", row_data: userData };
const pwdLabel = ViewPassword(pwdField);

// 注册到系统
uitypesdef.setViewKlass('str', ViewStr);
uitypesdef.setViewKlass('password', ViewPassword);

总结

本模块构建了一个灵活的 UI 视图映射框架,允许根据不同字段类型动态渲染合适的显示组件。尽管目前仅实现了部分功能,但其设计具备良好的扩展性,适合进一步发展为完整的低代码前端渲染引擎。


状态:原型阶段,核心机制可行,需优化命名一致性与完整性。
📦 适用场景:表单预览、后台管理系统、配置面板等需要动态 UI 渲染的场合。


文档版本1.0
最后更新2025-04-05