课程章节介绍
同学们,今天我们来看看,在 Lightning Web Components 的 datatable 里,怎么让自定义的单元格类型变得可以编辑。自定义类型默认只能展示,要让它像标准字段那样能双击编辑,需要三个紧密配合的步骤,我们一个一个来说。
第一步,你得创建一个独立的编辑模板,也就是一个专门的 HTML 文件,用于编辑状态下的单元格。这个模板里必须用 lightning-input 组件,而且它的 type 属性要跟展示模板里用来显示值的数据类型保持一致,比如文本、数字、日期等等。编辑模板会收到几个特殊属性,用来帮它正确显示:editedValue 是当前单元格的值,columnLabel 是列的标题文字,required 是一个布尔值,表示这一列在定义的时候有没有被标为必填,还有一个 typeLCS 是你在自定义类型上可以用的额外属性。为了键盘导航能正常访问到这个输入框,你需要在输入元素上加上 data-inputable="true" 这个属性。很简单吧,就是给 lightning-input 加一个 data-inputable='true'。
第二步,我们要把这个编辑模板引用到自定义类型的定义里。在你定义自定义数据类型的 JavaScript 文件里,导入刚才的编辑模板,然后在类型定义的对象里,把 editTemplate 属性指向它,同时一定要设置 standardCellLayout: true,这是键盘导航正常工作所必需的。
第三步,回到列的定义。在你想让它可编辑的列上,直接把 editable 属性设置为 true,这样该列用到自定义类型的地方,就会用我们刚配置的编辑模板去渲染编辑状态了。
完成这三步,自定义单元格就支持双击编辑了。接下来说说验证。基本的数据约束,比如数值范围、必填检查,lightning-input 自己就能处理。如果要做更复杂的验证逻辑,比如多个字段交叉校验,那需要在编辑模板对应的子组件里,向外暴露 validity() 函数来返回校验状态,同时暴露 showHelpMessageIfInvalid() 来显示报错提示。目前还不支持服务器端的验证规则,所以所有校验都要在前端完成。
最后提醒一个很重要的限制:编辑模板里只能放单个基础的输入组件,你要用 lightning-input,千万不要使用 lightning-input-field,而且不能嵌套组合多个输入组件,它只接受单一 input。这一点在实现的时候一定要记住。
好了,掌握这三个核心步骤和验证方式,你就能让任何自定义数据类型在 datatable 里顺滑地可编辑了。大家可以动手试试看。
关键词
LWC
Lightning Web Components
Salesforce