news 2026/9/10 6:26:36

ToolJet 添加组件(Widget)完整指南:从拖放入画布到查询数据绑定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ToolJet 添加组件(Widget)完整指南:从拖放入画布到查询数据绑定

ToolJet 添加组件(Widget)完整指南:从拖放入画布到查询数据绑定

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

本指南以 ToolJet 教程《Adding a widget》为主线,系统讲解在 ToolJet 应用编辑器中添加组件的完整流程:从右侧Widget manager(组件管理器)搜索与拖放组件、画布上的缩放与重定位、向 Modal 中添加组件、调整表格列宽,再到通过检查器面板配置组件属性,最终把 PostgreSQL 查询结果通过{{queries.postgresql1.data}}双花括号表达式绑定到表格组件。读完本篇,你将掌握 ToolJet 低代码编辑器的核心交互方式与数据绑定原理,能够独立完成"连数据源 → 建查询 → 拖组件 → 绑数据"的完整应用搭建链路。

前置条件:本教程所处的上下文

本教程是 ToolJet 入门系列(位于 docs/docs/tutorial 目录)中的一环。在开始添加组件之前,假设你已经完成了以下前置步骤:

  1. 创建一个 ToolJet 应用并进入应用编辑器;
  2. 连接一个数据源(本教程以PostgreSQL为例);
  3. 创建并运行一个名为fetch customers(或示例中的postgresql1)的查询,用于返回客户数据。

本篇文章的所有操作都发生在 ToolJet 编辑器的画布(Canvas)右侧边栏中,无需编写任何前后端代码。

打开组件管理器:添加组件的入口

要添加组件,首先导航到右侧边栏的Widget manager(组件管理器)。它会列出所有可以添加到应用中的内置组件,并且提供了搜索功能,帮助你在组件数量较多时快速定位目标组件。

从仓库源码看,组件管理器由 ComponentsManagerTab.jsx 实现。它从componentTypes(组件类型列表)中动态生成组件清单,并使用Fuse.js模糊搜索(new Fuse(searchList, ...),防抖 125ms)来支持搜索框的即时过滤,也就是说即便你不记得组件的完整名称,输入部分关键词也能匹配到目标组件。

组件管理器中的组件按分类组织,分类定义见 sectionConfig.js:

分类包含的组件
Commonly used(常用)Table、Button、Text、TextInput、DatetimePickerV2、Form
Buttons(按钮)Button、ButtonGroupV2、PopoverMenu、FileButton
Data(数据)Table、Chart、KeyValuePair
Layouts(布局)Form、ModalV2、Container、Accordion、Tabs、Listview、Kanban、Calendar
Text inputs(文本输入)TextInput、TextArea、EmailInput、PasswordInput、RichTextEditor
Number inputs(数字输入)NumberInput、PhoneInput、CurrencyInput、RangeSliderV2、StarRating
Select inputs(选择输入)TagsInput、DropdownV2、MultiselectV2、ToggleSwitchV2、RadioButtonV2、Checkbox、TreeSelect、Cascader
Date and time inputs(日期时间输入)DaterangePicker、DatePickerV2、TimePicker、DatetimePickerV2
Navigation(导航)Navigation、Link、Pagination、Steps
Media(媒体)Icon、Image、SvgImage、PDF、Map、AudioRecorder、Camera
Presentation(展示)Text、Tags、CircularProgressBar、ProgressBar、Timeline、Divider、VerticalDivider、Spinner、Statistics、Timer、JSONExplorer
Custom(自定义)CustomComponent、Html、IFrame
Miscellaneous(其他)FilePicker、CodeEditor、ColorPicker、BoundedBox、QrScanner、Chat、ReorderableList、JSONEditor
Legacy(旧版组件)Modal、Datepicker、RadioButton、ToggleSwitch、DropDown、Multiselect、RangeSlider、ButtonGroup

组件的完整注册表位于 widgetConfig.js,每一个组件的配置(名称、属性、校验规则、默认值)都由对应的配置文件声明,例如表格组件的配置见 table.js。搜索时可以直接输入组件名,比如输入table即可快速筛选出 Table 组件。

拖放组件到画布

以本教程的场景为例:我们需要在应用中添加一个Table(表格)组件,用来展示上一步查询得到的客户数据。

操作步骤

  1. 在右侧 Widget manager 中找到Table组件(可通过搜索框输入Table快速定位);
  2. 按住鼠标左键,将组件拖拽到左侧画布(Canvas)上
  3. 松开鼠标,组件即被放置到画布中。

ToolJet 的组件管理器使用 HTML5 拖放机制配合自定义的DragLayer(见 DragLayer)渲染拖拽时的视觉反馈。拖放完成后,组件会以网格化布局出现在画布上,自动吸附到网格线,方便后续对齐与排版。

调整组件大小与位置

组件放入画布后,可以自由缩放与重新定位,具体方式如下:

  • 选中组件:单击画布上的组件即可将其选中,组件四周会出现选中边框与操作手柄;
  • 调整大小:拖拽组件右下角(或边缘)的缩放手柄,即可横向、纵向或整体改变组件的宽高;
  • 重新定位:直接拖拽组件本体,将其移动到画布中的任意网格位置。

从实现角度看,画布上组件的大小与位置调整基于网格系统,组件尺寸、坐标以网格单元为单位记录,相关逻辑集中在 AppCanvas/Grid 目录(如 Grid.jsx),确保组件在桌面与移动端布局切换时依然保持合理排布。

向 Modal 中添加组件

除了直接放在画布上,组件还可以添加到Modal(模态框)内部。ToolJet 中 Modal 本身也是一个组件,其内容区可以容纳其他组件。

操作步骤

  1. 先添加 Modal 组件:从 Widget manager 中将Modal组件拖放到画布上。注意:在触发Show modal动作之前,必须先确保画布中已存在一个 Modal 组件;
  2. 触发 Show modal 动作:通过某个组件(例如 Button)的事件处理器触发Show modal action(详见 Actions 动作文档 中的可用动作列表),让 Modal 在预览/运行时显示出来;
  3. 点击画布上的 Modal 区域:当 Modal 处于打开/可编辑状态时,点击其内容区域,使右侧边栏切换为对应的编辑上下文;
  4. 从 Widget manager 拖放组件到 Modal 内部:此时右侧 Widget manager 依然可用,将需要的组件直接拖入 Modal 内容区即可。

在仓库中,Modal 相关组件有新旧两套实现:Modal(旧版,位于 Modal.jsx)与ModalV2(新版,位于 ModalV2 目录)。Modal 组件配置中同样声明了Show modal/Close modal等动作(可在 WidgetManager 的 modal 配置 中查看),事件处理器通过 Inspector 的 EventManager 挂接这些动作。推荐在新项目中使用ModalV2

调整表格列宽

表格组件放置完成后,如果列内容较多,可以通过列的缩放手柄(resize handle)直接调整列宽

  • 将鼠标悬停在表头两列之间的分隔线上;
  • 当光标变为可拖拽的缩放指针时,按住并左右拖动即可调整该列宽度;
  • 松开鼠标完成调整,列宽会立即生效并持久化保存到组件定义中。

通过检查器面板修改组件属性

单击画布上的组件,右侧边栏会切换为Inspector(检查器)面板。检查器面板集中管理该组件的全部可配置项,包括:

  • Properties(属性):组件的数据与功能配置,例如表格的 Title、Data(数据源)、Columns(列定义)、Loading state 等;
  • Styles(样式):外观配置,如背景色、边框、圆角、内边距、CSS class 等;
  • Events(事件):组件事件与动作绑定;
  • General(通用):如 Tooltip(悬浮提示)等通用设置。

在检查器面板中,你可以直接修改属性值;以表格组件为例,可以配置要展示的列:

  • Columns(列)配置中管理列集合;
  • 列的显示顺序可以通过拖拽列名旁边的拖拽图标来调整
  • 每个列还可以独立配置列标题、数据类型、宽度、是否可排序等。

从源码看,检查器面板对每个属性的渲染基于组件配置中声明的type字段(如stringcodetoggledropdownMenuarray等),并配套对应的校验规则(validation.schema)。例如表格的data属性被声明为type: 'code',其校验 schema 为对象数组{ type: 'array', element: { type: 'object' } }),默认值为[{ id: 1, name: 'Sarah', email: 'sarah@mail.com' }],详见 table.js。这意味着数据字段接受 JSON 数组或任意可解析为对象数组的表达式。

将查询数据绑定到组件:双花括号表达式

现在进入本教程最核心的环节:把fetch customers查询返回的data对象连接到表格组件上。

绑定步骤

  1. 单击画布上的表格组件,打开右侧检查器面板;
  2. 找到Data(数据)属性,此时它的值是一个空数组[]
  3. 在数据字段中输入单行 JavaScript 表达式,并用双花括号{{ }}包裹:{{queries.postgresql1.data}}
  4. 输入时编辑器会弹出变量建议下拉列表(自动补全),帮助你选择正确的变量路径;
  5. 由于查询在前面步骤中已经运行过,数据会立即渲染到表格中,无需重新发布应用。

双花括号绑定语法解析

ToolJet 中,几乎每个属性字段都支持双花括号{{ }}内的单行 JavaScript 表达式,这是一种声明式数据绑定机制:

  • {{queries.postgresql1.data}}:引用名为postgresql1的查询的返回数据(查询结果对象中的data数组);
  • 支持引用组件变量,如{{components.table1.selectedRow}}{{components.textinput1.value}}
  • 支持引用全局变量、页面变量、环境变量以及运行任意 JS 表达式的结果。

从源码实现看,该机制由 CodeBuilder 负责解析:编辑器会识别以{{开头、以}}结尾的表达式(见 CodeBuilder/utils.js),并基于当前应用状态(组件值、查询结果、全局变量等)生成自动补全建议(suggestions),在输入时以下拉列表形式呈现。自动补全的具体过滤逻辑见 autocompleteExtensionConfig.js,它会在输入满足{{...}}包裹条件时收集组件与查询相关的提示(如queries.postgresql1.datacomponents.table1等)并实时展示,这正是文档中提到的"输入时代码会自动弹出变量建议下拉"的底层实现。

查询对象queries的层级结构为queries.<queryName>.<field>,其中:

引用路径说明
queries.<queryName>.data查询成功返回的数据
queries.<queryName>.isLoading查询是否正在执行(布尔值)
queries.<queryName>.rawData查询返回的原始响应数据
queries.<queryName>.error查询执行失败时的错误信息

在绑定表格数据时,务必确认postgresql1查询已成功运行且返回的是对象数组(每行一个对象、对象键对应列名),这样表格会自动按对象的键生成列。

小结:完整的建表链路

至此,本教程完成了 ToolJet 中最经典的一条应用搭建链路:

  1. 连接数据源:创建 PostgreSQL 数据源连接;
  2. 创建并运行查询:在查询面板中编写fetch customers/postgresql1查询并运行,验证返回数据;
  3. 拖放组件:从右侧 Widget manager 将 Table 组件拖入画布;
  4. 布局调整:在画布上调整组件大小与位置,必要时放入 Modal 并调整表格列宽;
  5. 配置属性:通过检查器面板修改组件属性、管理列顺序;
  6. 绑定数据:在 Data 属性中输入{{queries.postgresql1.data}}将查询结果绑定到表格。

表格组件的更多高级用法——如服务端分页(server-side pagination)、行操作按钮(actions)、数据编辑(editing data)、动态列等——可继续查阅 Table 表格组件参考文档,该文档详细覆盖了表格组件的全部属性、事件与样式配置;如果你需要回顾查询创建步骤,可回到 教程目录 查看前置章节。

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 6:26:31

PRD Created

PRD Created 【免费下载链接】ECC The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. 项目地址: https://gitcode.com/GitHub_Trending/ev/E…

作者头像 李华
网站建设 2026/9/10 6:24:41

CANN/ge TensorDesc张量描述API

TensorDesc 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端…

作者头像 李华
网站建设 2026/9/10 6:23:24

ESP32-C3微信小程序BLE直连实战指南

简介&#xff1a;本资源是一套完整的乐鑫ESP32-C3 BLE与微信小程序双向通信开发源码&#xff0c;面向物联网初学者及嵌入式开发者&#xff0c;解决硬件端BLE外设开发与小程序端低门槛无线交互的集成难题。项目涵盖Arduino框架下的ESP32-C3固件代码&#xff08;.ino/.cpp/.h&…

作者头像 李华
网站建设 2026/9/10 6:21:40

从Selenium到Playwright:UI测试的范式转移与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 6:20:03

中小企业服务器托管避坑指南:机房、带宽与SLA全解析

中小企业选服务器托管&#xff0c;最怕的就是信息不对称。搜“服务器托管哪家好”&#xff0c;出来一堆广告和软文&#xff0c;真正能说清楚“我这家到底好在哪、适不适合你”的没几个。尚航科技这个牌子在圈子里不算陌生&#xff0c;做IDC和云服务有年头了&#xff0c;但网上公…

作者头像 李华