自定义JS事件开发指南(旧版)|飞书低代码平台

自定义JS事件开发指南(旧版)|飞书低代码平台

飞书低代码平台手册精选NaN-NaN-NaN
产品功能
功能简介
自定义 JS 事件动作支持开发者为表单、页面中的事件(如表单提交事件、页面加载事件、数据表格点击行事件等)绑定「自定义 JS 代码」,当事件发生时,执行特定的自定义 JS 代码。
表单中的自定义 JS 事件
250px|700px|reset
页面中的自定义 JS 事件
250px|700px|reset
适用场景
表单项自定义校验
  • 需求:在数字表单项中,写入的数值超过 100 后报错
  • 代码实现如下:
//清除各组件的error提示
context.event.currentComponent.clearError();
//获取表单内容并进行判断
const value = context.event.currentTarget.value;
if (value && value > 100) {
context.event.currentTarget.setError("数字不能超过100!")
} else {
context.event.currentTarget.setError(null);
}
  • 效果图:
250px|700px|reset
页面事件刷新表格数据
  • 需求:通过页面事件刷新表格数据
  • 代码实现如下:
// 按钮的自定义事件实现如下:
const newUniqueID = `${Date.now()}`;
// 设置页面变量后,所有依赖此页面变量的组件会刷新
context.page.setPageVar('var_15dpf9k', newUniqueID);
  • 表格组件的过滤条件配置如下:
250px|700px|reset
  • 效果图:
250px|700px|reset
表单与页面组件暴露出的事件
在表单和不同的页面组件中,会暴露不同的的事件。
表单
元素
目前支持的事件
表单
  • 表单打开时:表单加载完成之前触发
  • 表单提交时:点击「提交」按钮后,表单数据提交到服务器之前触发(当前表单中有报错的组件时,将不能触发)
表单中的字段组件
  • 获得焦点时:字段组件获得焦点时触发
  • 失去焦点时:字段组件失去焦点时触发
  • 值改变时:字段组件中的值发生改变时触发
  • 默认有 500 ms 的防抖: 500 ms 内,最多执行一次「值改变时」事件
  • 公式造成的字段值改变,不会触发该字段的 onChange 事件
表单中的明细组件
  • 单元格获取焦点时:组件中任何一个单元格的输入框获取焦点时触发
  • 单元格失去焦点时:组件中任何一个单元格的输入框失去焦点时触发
  • 单元格值改变时:组件中任何一个单元格的值发生改变时触发
  • 默认有 500 ms 的防抖: 500 ms 内,最多执行一次「值改变时」事件
  • 公式造成的字段值改变,不会触发该字段的 onChange 事件
  • 添加行:组件中增加了行
  • 删除行:组件中删除了行
添加行和删除行不会触发「单元格值改变时」事件,只会触发添加行和删除行的事件
页面
目前仅 Web 端页面组件支持自定义事件,移动端页面组件暂未支持。
元素
目前支持的事件
应用页面
  • 页面加载完成时:当整个窗口页面完成加载时触发
  • 页面即将关闭时:当整个窗口页面即将被关闭或刷新前触发,此时页面仍然可见
应用页面 - 侧导航链接
  • 点击时:当链接被点击时触发
应用页面 - Logo
  • 点击时:当 Logo 被点击时
图片
  • 点击时:当图片被点击时触发
宫格项 - 宫格卡片
  • 点击时
数据表格
  • 点击行时
数据表格 - 列
  • 点击时(可配置「可点击」的字段类型具有该事件):该列下的数据被点击时触发
数据表格 - 顶部按钮 / 行按钮
  • 点击时:当按钮被点击时触发
记录详情 - 字段
  • 点击时 (可配置「可点击」的字段类型具有该事件):该字段的值被点击时触发
记录详情 - 按钮
  • 点击时:当按钮被点击时触发
记录标题栏 - 按钮
  • 点击时:当按钮被点击时触发
通用标题栏 - 按钮
  • 点击时:当按钮被点击时触发
列表 - 列表项标题 / 副标题 / 详情
  • 点击时(可配置「可点击」的字段类型具有该事件):该字段的值被点击时触发
列表 - 按钮 / 列表项按钮
  • 点击时:当按钮被点击时触发
列表详情 - 列表操作
  • 点击时:当操作按钮被点击时触发
全局工具对象 API
在自定义表单事件和自定义页面事件中,提供了两个全局工具对象模块:kunlun 、context
kunlun: 可通过此对象模块实现数据请求,获取全局变量等。
context: 上下文对象,可通过此对象获取上下文相关变量的信息。
250px|700px|reset
image.png
API
解释
表单事件是否有此 API
页面事件是否有此 API
context
tenant
获取当前租户信息
app
获取当前应用信息
currentUser
获取当前用户信息
scene
获取当前自定义代码的运行场景
event
获取当前事件信息,如事件类型、事件相关数据、事件触发时间等
form
获取当前表单信息, 设置表单项的值/属性/错误信息等
page
获取当前页面信息, 设置页面变量等
kunlun
dataService
发起【数据请求
getVar
获取【全局变量
全局工具对象 API 详细说明
context.tenant
获取当前租户的基本信息
返回示例:
{
"id": 123,
"name": "hotpot",
"type": 1, //1-PROD,3-DEVORG,4-SANDBOX
"createdAt": 166012345678
}
context.currentUser
获取当前用户的基本信息
返回示例:
{
"_id": 1661915892174855,
"_name": {
"zh_CN": "张三",
"en_US": "Zhang San"
}
}
context.app
获取运行时应用的基本信息
  1. 返回示例:
{
"namespace": "event__c",
"label": {
"zh_CN": "自定义事件测试-Web",
"en_US": "Test For Event"
},
"createdAt": 1619594598302,
"createdBy": {
"id": 1698264932790343,
"name": "张三"
},
"updatedAt": 1619767318591,
"updatedBy": {
"id": 1698266222693390,
"name": "张三"
}
}
context.event
获取当前事件的信息
返回示例
  • 获取触发当前事件的组件信息context.event.currentTarget
  • 明细组件的事件中
  • 单元格获得焦点、单元格失去焦点、单元格值改变 的.currentTarget是 Cell 的实例
  • 添加行 和 删除行的事件 .currentTarget 是 Row 的实例
context.event.payload
事件触发时携带的数据
页面 or 表单
事件
Payload
页面
页面加载时
仅「详情记录页」具有(「标准页面」为空)
{
"recordId": 1650000000
}
页面
  • 数据表格组件:点击行时 / 点击行按钮时
  • 记录标题栏组件:点击按钮时
  • 记录详情组件:点击标题区按钮时
  • 列表组件:点击列表项按钮时
{
"record": { "_id":1650000000, ... }
}
页面
  • 数据表格组件:点击列 / 字段值时
{
"position": {
"field": "fieldApiName",
"recordId": 1650000000
},
"value": "示例数据" // 数据格式由字段类型决定
}
页面
  • 下拉选择组件:值改变时
// 数据类型为「对象记录」时
{
"dataType": "record",
"oldValue": 1650000000,
"newValue": 1650000000
}
// 数据类型为「选项」时
{
"dataType": "option",
"oldValue": "optionA",
"newValue": "optionB"
}
表单
加载时 / 提交时
获取焦点时 / 失去焦点时 / 值改变时
只有「需要基于已有记录发起」的操作的表单,会有 payload 信息
{
"recordId": 1717935764901981
}
kunlun.getVar
获取应用中的全局变量的值:可以在代码中使用 kunlun.getVar("key") 获取
  • 获取全局变量
const _var = await kunlun.getVar("key")
  • 创建、修改、删除全局变量
250px|700px|reset
image.png
kunlun.dataService
context.form
注意:此属性是表单事件特有的
获取当前表单信息
  • 返回示例:
{
"title": {
"zh_CN": "添加成员",
"en_US": "Add member"
},
"components": [
{
"id": "name_input_component", //组件的 ID
"alias": {
"zh_CN": "姓名",
"en_US": "Name"
},
"placeholder": {
"zh_CN": "请输入姓名",
"en_US": "Please enter name"
},
"tooltip": {
"zh_CN": "请输入姓名",
"en_US": "Please enter name"
},
"hidden": false,
"readonly": false,
"required": true,
"type": "text",
"value": "一段文本"
},
{
"id": "gender_option_component",
"alias": {
"zh_CN": "性别",
"en_US": "Gender"
},
"placeholder": {
"zh_CN": "请输入性别",
"en_US": "Please enter gender"
},
"tooltip": null,
"hidden": false,
"readonly": false,
"required": true,
"type": "option",
"optionList": [ //下拉选项列表,仅选项类型组件有
{
"apiName": "option1",
"label": {
"zh_CN": "选项1",
"en_US": "Option1"
}
},
{
"apiName": "option2",
"label": {
"zh_CN": "选项2",
"en_US": "Option2"
}
},
{
"apiName": "option3",
"label": {
"zh_CN": "选项3",
"en_US": "Option3"
}
}
],
"value": [
"option_1"
]
},
{···},
{···},
{···}
]
}
context.form.getComponentById
  • 获取当前表单中指定 id 的字段组件的实例 _componentRef
const _componentRef = context.form.getComponentById("name_input")
  • 组件 ID 在组件的属性面板中可看到 ⬇️
250px|700px|reset
image.png
普通字段组件
  • 返回:
{
"id": "name_input",
"alias": {
"zh_CN": "姓名",
"en_US": "Name"
},
"placeholder": {
"zh_CN": "请输入姓名",
"en_US": "Please enter name"
},
"tooltip": {
"zh_CN": "这是一段 Tooltip",
"en_US": "This "
},
"hidden": false,
"readonly": false,
"required": true,
"type": "text",
"value": "一段文本"
}
明细组件
明细组件与普通的字段组件不同,除了组件的基本信息,还会返回组件中的 rows 和 columns
  • 返回:
获取明细组件信息
  • .getComponentById()
  • 入参:
  • componentId
context.form.getComponentById("detail_1")
{
"id": "details_1", // 组件的 ID。每个拖入表单中的明细组件均自动生成 id
"type": "details", // 类型
"alias": { // 名称
"zh_CN": "表单明细组件",
"en_US": "Name"
},
"placeholder": {
"zh_CN": "请输入表单明细组件",
"en_US": "Please enter name"
},
"tooltip": {
"zh_CN": "请输入表单明细组件",
"en_US": "Please enter name"
},
"hidden": false,
"required": true,
"allowAdd": true,
"rows": [
{
"value": { // 第 1 条记录,index = 0
"_id": 212121212122121221, // ID 字段值,只有来源是「来自数据库」的记录有值
"fieldApiName1": "value", // 第 1 条记录的第一个字段值
"fieldApiName2": "value"
},
"setValue":f(), // 方法
"getCell":f()
},
{···},
···
{···} // 第 index+1 条记录
],
"columns": [
{
"apiName":"fieldApiName1", //展示字段的 API Name
"alias": {
"zh_CN": "书名",
"en_US": "Name"
},
"placeholder": {
"zh_CN": "请输入书名",
"en_US": "Please enter name"
},
"tooltip": {
"zh_CN": "请输入书名",
"en_US": "Please enter name"
},
"hidden": false,
"readonly": false,
"required": true,
"type": "text",
"value": [ // 本列字段值,数组中每项代表每个单元格的值
"小王子",
"活着",
"平凡的世界",
"百名孤独"
],
"setValue":f(),
"setError":f(),
"clearError":f(),
"setProps":f(),
"getCell":f()
},
···
{···} // 列的实例
],
"value": [
{
"_id": 212121212122121221, // ID 字段值,只有来源是「来自数据库」的记录有值
"fieldApiName1": "value",
"fieldApiName2": "value"
},
{
"_id": null,
"fieldApiName1": "value",
"fieldApiName2": "value"
},
{···}
]
}
在明细组件中下钻到指定字段的列
_componentRef.columns.find(x => x.apiName === 'fieldApiName1')
{
"apiName":"fieldApiName1", //展示字段的 API Name
"alias": {
"zh_CN": "书名",
"en_US": "Name"
},
"placeholder": {
"zh_CN": "请输入书名",
"en_US": "Please enter name"
},
"tooltip": {
"zh_CN": "请输入书名",
"en_US": "Please enter name"
},
"hidden": false,
"readonly": false,
"required": true,
"type": "text",
"value": [ // 本列字段值,数组中每项代表每个单元格的值
"小王子",
"活着",
"平凡的世界",
"百名孤独"
]
}
在明细组件中下钻到指定 index 的行
_componentRef.rows[1]
{
"value": {
"_id": null,
"fieldApiName1": "value",
"fieldApiName2": "value"
}
}
获取明细组件中指定单元格 .getCell()
  • 入参:
  • fieldApiName
  • index
在不同的层级获取指定单元格
  • _componentRef.getCell("phoneNumber", 1)
  • _componentRef.columns.find(x => x.apiName === 'fieldApiName1').getCell(1)
  • _componentRef.rows[1].getCell("phoneNumber")
返回示例:
{
"index":1, // 单元格所在行的 index(index 从 0 开始计数)
"apiName":"phoneNmuber", // 单元格所在列的展示字段 apiName
"value": {"key":"+86","number":11312121,"code":"+86(CN)"}, //不同的字段值 value 不同
}
_componentRef.setValue()
修改组件中的值
  • 不传任何参数或传空值时,将把组件中的值清空
  • 只读的字段,setValue 不会生效
语法示例
效果
const _componentRef = context.event.currentComponent;
_componentRef.setValue({
"zh_CN": "这里是修改后的值",
"en_US": "english"
})
250px|700px|reset
字段组件
字段组件类型
参数值类型
示例 (const _componentRef = context.event.currentComponent;)
文本
string
_componentRef.setValue("文本")
Auto ID
string
_componentRef.setValue("N000001")
数字
number
_componentRef.setValue(12345678)
布尔
boolean
_componentRef.setValue(true)
邮箱
string
需是邮箱格式,否则组件会报错
_componentRef.setValue("test@test.com")
选项
string,值为选项 api name
api name 不存在时,更新不成功,且 console 会报错
_componentRef.setValue("optionApiName")
多选类型通过数组赋值
关联对象
int 或 string 都兼容,值为记录 id
id 不存在或无该记录权限时,更新不成功,且 console 会报错
_componentRef.setValue(1700648125701303)
多选类型通过数组赋值
多语类型
object
_componentRef.setValue({
"zh_CN": '你好',
"en_US": 'english'
})
// 只设置单一语种
_componentRef.setValue({
"zh_CN": '你好'
})
日期
string
_componentRef.setValue("2020-01-01");
日期时间
int 时间戳
_componentRef.setValue(1577836800000);
电话
object 或 string
//方式一,传入对象(获取手机号后直接赋值的场景)
_componentRef.setValue(
{
"key": "+86(CN)",
"code": "+86",
"number": "13802345678"
})
//方式二,只传入「number」的文本,默认是 +86,不传区号和国家码,则默认是 "+86" 和 "CN"
_componentRef.setValue("13802345678")
组合类型字段
list<object>
object 是一条组合类型 record,Key 是字段 api name
_componentRef.setValue([{
"company": "字节跳动",
"Job_level": "P1",
"job": "PM",
"start_date": "2010-01-01"
"end_date": "2020-01-01"
},{
"company": "五道口跳动",
"Job_level": "P0",
"job": "PM",
"start_date": "2001-01-01"
"end_date": "2010-01-01"
}])
文件
  • 单文件字段:object
  • 多文件字段:list<object>
object 是一条组合类型 record,Key 是字段 api name
可以在函数中使用 upload 的接口,上传文件后获得文件 token
// 单文件
_componentRef.setValue({
id: 'a4879a6d2e8e43b98781ba6f5b261071',
mime_type: 'jpg',
name: '328648-14011213253758.jpg',
size: 143592,
token: '57b70c0acf244e62887a2dcf9bf938c1'
})
// 多文件
_componentRef.setValue([{
id: 'a4879a6d2e8e43b98781ba6f5b261071',
mime_type: 'jpg',
name: '328648-14011213253758.jpg',
size: 143592,
token: '57b70c0acf244e62887a2dcf9bf938c1'
},
{
id: 'a4879a6d2e8e43b98781ba6f5b261071',
mime_type: 'jpg',
name: '328648-14011213253758.jpg',
size: 143592,
token: '57b70c0acf244e62887a2dcf9bf938c1'
}])
头像
object
其中 image.large 是图片的 preview URL,可以通过「上传图片」的 Open API 或者 前端 SDK 上传图片
_componentRef.setValue({
"image":{
// 图片 preview url
},
//固定值
"source": "image"
})
明细组件
  • 可更新组件、行、列、单元格的值
  • 明细组件中不同字段的值类型,与表单中的字段组件值类型相同
  • 只读的字段,setValue 不会生效
功能
示例
更新行的值 _row.setValue()
  • 入参
  • map
  • map 中的 key 是字段 API Name
  • 不同类型的字段,参数值格式与表单中的字段组件一致,具体可见字段组件
const _componentRef = context.form.getComponentById("detail_1")
const _row = _componentRef.rows[2]
const row2Value = {
"_name":"李四",
"type":"option_345663",
"lookupUser":1700648125712345
}
_row.setValue(row2Value)
更新列的值 _row.setValue()
  • 入参
  • array
  • map 中的 key 是字段 API Name
  • 不同类型的字段,参数值格式与表单中的字段组件一致,具体可见字段组件
const _componentRef = context.form.getComponentById("detail_1")
const _col = _componentRef.columns.find(x => x.apiName === 'fieldApiName1')
const colValue = ["option_345663","option_345663","option_345663"]
_col.setValue(colValue)
更新指定单元格的值 _cell.setValue()
  • 入参
  • 该单元格的字段值
  • 不同类型的字段,参数值格式与表单中的字段组件一致,具体可见字段组件
const _componentRef = await context.form.getComponentById("detail_1")
const _cell = _componentRef.getCell("type",2)
_cell.setValue("option_345663")
更新组件的值 _componentRef.setValue(componentValue)
  • 传入一个完整的 table,完全覆盖更新明细组件中的值
  • 入参
  • 由 map 组成的数组
  • 数组长度是明细组件的行数
  • map 的 key 是展示字段的 API Name
  • 如果 key 对应的字段是只读的,则更新不成功
不建议使用此方式。此方式可能会非常影响性能
建议按行、按列、按单元格更新值
const _componentRef = context.form.getComponentById("detail_1")
const tableValue = [
{
"_name":"张三",
"type":"option_121211",
"lookupUser":1700648125701303 //更新 lookup 字段。不同字段的值结构见附录
},
{
"_name":"李四",
"type":"option_345663",
"lookupUser":1700648125712345
},
{
"_name":"王二",
"type":"option_789987",
"lookupUser":1700648125745678
},
]
_componentRef.setValue(tableValue)
_componentRef.setProps
修改组件的属性, 支持传入不同的参数修改组件的不同属性,如 alias、hidden 等
支持的参数有:
参数
参数类型
对应的组件属性
示例
title
String
表单的标题
修改表单的标题
context.form.setProps({"title": "新标题"});
alias
object
别名 / Alias
修改组件的 Alias、Placeholder、tooltip
代码:
_componentRef.setProps({
"alias": {
"zh_CN":"这是修改后的别名",
"en_US":"alias"
},
"placeholder": {
"zh_CN":"这是修改后的占位符",
"en_US":"placeholder"
},
"tooltip": {
"zh_CN":"这是修改后的tooltips",
"en_US":"tooltip"
}
})
效果:
250px|700px|reset
placeholder
object
占位符 / Placeholder
tooltip
object
提示 / Tooltip
text
object
文字说明 / Description
模块标题 / Section title
提示 / Notification
修改 文字说明、模块标题、提示组件的文本内容
const _notificationComponent = context.form.getComponentById("notification_1")
_notificationComponent.setProps({
"text": {
"zh_CN":"这是修改后的提示",
"en_US":"Notification"
}
})
效果:
250px|700px|reset
hidden
Boolean
隐藏 / Hidden
仅对「展示元素」类型的组件有效
// 设置 display element 组件隐藏
const _displayComp = context.form.getComponentById("description_1")
// 方式一,使用 setProps()
_displayComp.setProps({hidden:true}); //隐藏
_displayComp.setProps({hidden:false}); //显示
//方式二,使用 hide() / show() 方法
_displayComp.hide(); //隐藏
_displayComp.show(); //显示
minDate
maxDate
Date
日期可选范围
仅日期组件有效
设置日期和日期时间可选范围
_componentRef.setProps({
"minDate": "2020-03-11",
"maxDate": "2020-03-21"
})
250px|700px|reset
minDateTime
maxDateTime
DateTime 时间戳
日期时间可选范围
仅日期时间组件有效
_componentRef.setProps({
"minDateTime": 1577836800000,
"maxDateTime": 1577836800000
})
_componentRef.setError() / _componentRef.clearError()
设置 / 清除表单项的报错信息
TIP: 当表单中有任何报错时,不会触发表单的 onSubmit 事件。对组件使用.setError()如果没有使用.clearError(),该组件将一直报错(表单将一直无法提交)
字段组件
功能
示例
.setError(),设置组件报错
  • 参数是多语类型的 Error Message
//设置组件报错
//设置多语的 error message
_componentRef.setError({
"zh_CN": "这是自定义的 error message",
"en_US": "english"
})
//设置单语的 error message
_componentRef.setError("这是自定义的 error message")
250px|700px|reset
.clearError(),清除组件的报错状态和样式
  • 无需传参
//取消组件报错
_componentRef.clearError()
明细组件
明细组件报错分为:组件报错、列报错、单元格报错
功能
示例
设置报错.setError()
  • 入参
  • 多语类型的 Error Message
  • 组件级报错
  • context.form.getComponentById("detail_1").setError()
const _componentRef = await context.form.getComponentById("detail_1")
const _column = _componentRef.columns.find(x => x.apiName === 'type')
const _cell = _column.getCell(2)
const errorMsg = {
"zh_CN": "报错文案占位符",
"en_US": "Show Error"
}
// 组件级报错
_componentRef.setError(errorMsg)
// 列级报错
_column.setError(errorMsg)
// 单元格级报错
_cell.setError(errorMsg)
250px|700px|reset
250px|700px|reset
250px|700px|reset
清除报错.clearError()
  • 无需入参
// 清除组件级报错
_componentRef.clearError()
// 清除列级报错
_column.clearError()
// 清除单元格级报错
_cell.clearError()
_componentRef.addRow()
明细组件特有,在明细组件上添加行
  • 包含了:添加行 & 给该行赋值的动作
  • 添加行后,会触发明细组件的「添加行」事件
  • 入参:由 map 组成的数组
  • 如果不传参数,则只增加一个空行
  • 出参:添加了该行后的整个组件实例
  • 可继续链式调用
const rowValue = {
"_name": "李四",
"type": "option_345663",
"lookupUser": 1700648125712345
}
const _newCopmpnent = _componentRef.addRow(rowValue)
//链式调用举例
_newCopmpnent.getCell("type",2).setError(errorMsg) //给第 3 行 type 字段设置报错
_componentRef.delete()
明细组件特有,删除明细组件中的指定行
  • 无需入参
_componentRef.rows[2].delete()
  • 删除行后,会触发明细组件的「删除行」事件
context.form.disableSubmit() / context.form.enableSubmit()
阻止 / 允许表单提交
TIP: 使用「context.form.disableSubmit()」后,如果没有使用「context.form.enableSubmit()」,表单将一直无法提交
  • 示例
context.form.disableSubmit(); //校验开始前先阻止提交,防止校验未完成时表单提交
var _componentRef = context.event.currentComponent;
if(false){
_componentRef.setError("校验出错");
}else{
_componentRef.clearError();
context.form.enableSubmit(); //校验通过时,允许提交
}
context.page
注意:此属性是页面事件特有的
获取当前页面信息
  • 返回示例:
{
"label": {
"zh_CN": "测试页面",
"en_US": "Test Page"
},
"apiName": "testPage",
"type": "recordPage", // 页面类型,为 "standard"|"recordPage"
"objectApiName": "testObj", // 页面关联的对象,当 type 为 "standard" 时为空
"subPages": [ // 布局为「单页」的页面,该属性值为空
{
label:
children:
[{label:}]
}
{
"zh_CN": "子页面 1",
"en_US": "Subpage 1"
},...
],
"currentSubPage": { // 布局为「单页」的页面,该属性值为空
"zh_CN": "子页面 1",
"en_US": "Subpage 1"
},
"pageVars": {
"var1": {...}, // 记录类型的页面变量
"var2": "sample", // 文本类型的页面变量
"var3": 123123123, // 数字类型的页面变量
...
},
"components": [ // 具有层级结构
{
"id": "table_abcsl2d",
"type": "table",
"hidden": false,
"isEditing": false,
"editingPosition": {},
"textForSearch": "",
"filter": [],
"sort": [],
"children": {...} // 组件层级结构下的子组件
}, ...
],
...
}
context.page.setPageVar
设置页面变量
  • 语法:
await context.page.setPageVar(varApiName, value)
  • 示例:
await context.page.setPageVar("pageVar1", "待更新值");
  • 不同类型页面变量的数据结构
变量类型
数据结构
单值记录
1712204686210110
多值记录
[1713041695850535, 1713041659138109]
文本
"text"
多语文本
{zh_CN: "文本", en_US: "text"}
单值选项
"optionApiName"
多值选项
["optionApiName1", "optionApiName2"]
数字
123123
布尔
true
日期
"2021-10-08"
日期时间
1633622407000
邮箱
手机号
{key: "+86(CN)", number: "15361000000"}
Web 端调试
对于Web 端的自定义事件调试,同时支持以下两种方式为代码打断点进行 debug。(移动端中的真机事件调试见:移动端自定义事件真机调试
使用 debugger 关键字进行调试
  • 触发时机(以下条件同时发生):
  • 该表单正在运行(runtime)
  • 打开浏览器的「检查」
  • 触发了 debugger 关键字所在的自定义 JS 代码
// 运行时打开浏览器「检查」,执行当前函数时,代码将会停在这里
debugger;
context.event.currentComponent.setValue("1234")
250px|700px|reset
在浏览器 Sources 面板中为代码设置断点
在「检查 - Sources」中查看当前表单的 JS 文件,并设置断点
  • js 文件路径:
  • 「Sources 面板」/Page/Top/webpack://tem/dxEvent/xxxxxxxx/index.js
250px|700px|reset
先进生产力和业务协同平台
联系我们立即试用

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
联系我们立即试用