ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Jspreadsheet 列类型(Column Types)完全指南:内置类型、高级配置与自定义编辑器开发

Jspreadsheet 列类型(Column Types)完全指南:内置类型、高级配置与自定义编辑器开发 前端UI组件【免费下载链接】ceJspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls.项目地址https://gitcode.com/gh_mirrors/ce/ce点击查看免费下载Jspreadsheet 是一个轻量级的 JavaScript 数据网格组件其核心能力之一便是列类型column types系统通过为每一列声明一个type即可让单元格获得对应的渲染方式与编辑交互覆盖文本、数值、下拉、日期、图片、颜色、富文本等常见场景。本篇指南基于仓库中的 column-types 官方示例 展开并结合 src/utils/internal.js、src/utils/editor.js、src/utils/columns.js 的源码实现系统讲解 11 种内置列类型的使用方法、关键配置参数、底层渲染与编辑原理并完整演示如何基于第三方插件如 clockpicker创建自定义列类型。读完本篇你将能够在自己的项目中熟练配置各类列、自定义列渲染与编辑器并理解 Jspreadsheet 列类型体系的工作机制。内置列类型总览Jspreadsheet 原生支持以下 11 种列类型text纯文本列默认类型numeric数值列支持掩码mask与小数点符号配置hidden隐藏列不参与显示但仍保留数据dropdown下拉选择列autocomplete带自动补全搜索的下拉列基于 dropdown 的autocomplete选项checkbox复选框列radio单选按钮列calendar日期/时间选择列image图片列基于 data URLcolor颜色列html富文本 HTML 列这些类型在源码中均有对应的渲染与编辑分支。以单元格创建为例src/utils/internal.js 中的createCell函数会根据列定义分派渲染逻辑checkbox/radio 会生成input元素、calendar 会调用jSuites.calendar格式化日期、dropdown 会通过getDropDownValue将存储的键值映射为可读文本、color 会根据render选项渲染色块或文字、image 会识别data:image前缀生成img标签、html 则会剥离script后再写入innerHTML。这说明列类型不仅仅影响长得什么样也决定了数据在单元格中的呈现与存取方式。除了type本身列类型还接受若干通用属性来改变行为例如title表头标题、width列宽、align对齐方式、readOnly只读、wordWrap自动换行等。其中width、align在 src/utils/columns.js 的createCellHeader中会作为默认值兜底未显式配置时使用defaultColWidth默认 100与defaultColAlign默认center。一次展示 7 种内置类型入门示例官方示例在一个表格中同时演示了text、dropdown、calendar、image、checkbox、numeric、color七种类型的组合使用是理解列类型最直观的起点html script srchttps://bossanova.uk/jspreadsheet/v4/jspreadsheet.js/script script srchttps://jsuites.net/v5/jsuites.js/script link relstylesheet hrefhttps://bossanova.uk/jspreadsheet/v4/jspreadsheet.css typetext/css / link relstylesheet hrefhttps://jsuites.net/v5/jsuites.css typetext/css / div idspreadsheet/div script var data [ [Jazz, Honda, 2019-02-12, , true, $ 2.000,00, #777700], [Civic, Honda, 2018-07-11, , true, $ 4.000,01, #007777], ]; jspreadsheet(document.getElementById(spreadsheet), { data:data, columns: [ { type: text, title:Car, width:120 }, { type: dropdown, title:Make, width:200, source:[ Alfa Romeo, Audi, Bmw ] }, { type: calendar, title:Available, width:200 }, { type: image, title:Photo, width:120 }, { type: checkbox, title:Stock, width:80 }, { type: numeric, title:Price, width:100, mask:$ #.##,00, decimal:, }, { type: color, width:100, render:square, } ] }); /script /html逐列解读这个配置Cartext普通文本列title定义表头文字width定义列宽。Makedropdown下拉列source传入字符串数组即生成下拉选项编辑时点击单元格会弹出 jSuites dropdown。Availablecalendar日历列直接渲染YYYY-MM-DD格式的日期点击后弹出日期选择器。Photoimage图片列数据需为data:image/...形式的 base64 URL渲染时自动生成img标签。Stockcheckbox复选框列数据中true/1对应勾选状态。Pricenumeric数值列mask:$ #.##,00定义显示掩码千分位用.、小数位用,decimal:,指定小数分隔符因此数据2000会显示为$ 2.000,00。color颜色列render:square表示以纯色方块形式展示颜色值十六进制字符串省略该选项时则直接以该颜色渲染文字。关于数值掩码的底层处理numeric列的掩码并非只在展示层生效。src/utils/internal.js 的parseValue会调用jSuites.mask.render对数值进行掩码渲染而 src/utils/editor.js 的closeEditor在保存numeric列时做了特殊处理若输入为空且未设置allowEmpty则落库为0。此外 src/utils/internal.js 的parseNumber会根据列的decimal配置解析带掩码的字符串为真正的数值供公式计算使用。也就是说掩码只负责显示底层数据仍是可计算的纯数字。其他内置类型的进阶配置官方文档指出dropdown与calendar两种类型拥有更多高级配置下面分别补充说明。dropdown / autocomplete从简单数组到条件联动下拉列并不局限于简单的字符串数组dropdown-and-autocomplete 示例 展示了多种进阶用法autocomplete multiple同时设置autocomplete:true, multiple:true后下拉框支持输入搜索与多选多选值以;分隔存储如CA;US;UK。url 远程数据url:/jspreadsheet/countries可从外部 JSON 接口动态加载选项。键值对对象source:[ {id:1, name:Fruits} ]形式的数据单元格存储id、显示name——src/utils/internal.js 的getDropDownValue正是负责这一映射还兼容数组键值、;分隔的多值。条件联动 dropdown通过filter:function(instance, cell, c, r, source)回调根据同列或前列的值动态返回候选集。在 src/utils/editor.js 中打开编辑器时会优先使用该filter回调的返回结果作为下拉数据源。分组与图片选项source对象支持image、title、group字段配合options:{ type:picker }可渲染出带分组和头像的响应式选择器。从源码看dropdown 列的编辑由 src/utils/editor.js 的openEditor实现它会基于列的multiple、autocomplete选项调用jSuites.dropdown(editor, options)创建下拉组件并在关闭时通过cell.children[0].dropdown.close(true)取回值见 closeEditor。calendar日期格式与时间选择日历列通过options对象透传 jSuites 日历插件的配置详见 date-and-datetime-picker 示例常用项包括options : { // 日期格式 format:DD/MM/YYYY, // 允许键盘输入日期 readonly:0, // 默认今天 today:0, // 显示时间选择器 time:0, // 显示重置按钮 resetButton:true, // 占位文本 placeholder:, // 月份与星期文案可用于国际化 months:[Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec], weekdays:[Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday], weekdays_short:[S, M, T, W, T, F, S], // 初始值 value:null, // 事件 onclose:null, onchange:null, // 全屏模式屏幕宽度小于 800 时自动开启 fullscreen:false, };例如options: { format:DD/MM/YYYY HH24:MI, time:1 }即可在日历列中加入时间选择。日期格式与解析同样有源码依据createCell 中会先尝试用jSuites.calendar.extractDateFromString解析非标准格式的日期再用jSuites.calendar.getDateString按列的options.format默认YYYY-MM-DD格式化显示openEditor 中未显式给出format时也会默认补上YYYY-MM-DD。checkbox / radio布尔型交互两者都会在单元格内创建对应类型的input元素见 createCellvalue 1 || value true视为勾选点击即通过setValue写回数据。区别在于radio具有互斥语义updateCell 在更新某行 radio 时会先把整列其他行置为false。另外checkbox/radio 列在 openEditor 中的编辑行为就是直接切换值无需弹出编辑器。imagebase64 图片展示image 列只接受data:image开头的 data URL 作为有效值见 createCell编辑时使用jSuites.image组件完成上传/选择见 openEditor关闭编辑器后取回img的src作为单元格值见 closeEditor。color色块或着色文字color 列的数据为十六进制颜色字符串。render:square时渲染为纯色方块否则以该颜色直接着色单元格文字。更新逻辑见 updateCell编辑交互由jSuites.color提供见 openEditor。html富文本内容html 列允许单元格承载富文本编辑时启用jSuites.editor富文本编辑器见 openEditor保存时通过editor.getData()取回 HTML见 closeEditor。渲染时 stripScript 会移除 HTML 中的script标签以防止脚本注入。自定义列类型基于外部插件创建 time 列Jspreadsheet 的列类型体系是可扩展的你可以基于任意第三方插件构建自定义列类型。官方示例以 clockpicker 时间选择插件为例创建了一个 time 自定义列。完整源码html script srchttps://bossanova.uk/jspreadsheet/v4/jspreadsheet.js/script script srchttps://jsuites.net/v5/jsuites.js/script link relstylesheet hrefhttps://bossanova.uk/jspreadsheet/v4/jspreadsheet.css typetext/css / link relstylesheet hrefhttps://jsuites.net/v5/jsuites.css typetext/css / link relstylesheet typetext/css hrefhttp://weareoutman.github.io/clockpicker/dist/jquery-clockpicker.min.css / script srchttps://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js/script script srchttp://weareoutman.github.io/clockpicker/dist/jquery-clockpicker.min.js/script div idcustom/div script var data2 [ [PHP, 14:00], [Javascript, 16:30], ]; var customColumn { // Methods closeEditor : function(cell, save) { var value cell.children[0].value; cell.innerHTML value; return value; }, openEditor : function(cell) { // Create input var element document.createElement(input); element.value cell.innerHTML; // Update cell cell.classList.add(editor); cell.innerHTML ; cell.appendChild(element); $(element).clockpicker({ afterHide:function() { setTimeout(function() { // To avoid double call if (cell.children[0]) { spreadsheet.closeEditor(cell, true); } }); } }); // Focus on the element element.focus(); }, getValue : function(cell) { return cell.innerHTML; }, setValue : function(cell, value) { cell.innerHTML value; } } spreadsheet jspreadsheet(document.getElementById(custom), { data:data2, columns: [ { type: text, title:Course Title, width:300 }, { type: text, title:Time, width:100, editor:customColumn }, ] }); /script /html自定义列类型的接口契约自定义列类型本质上是一个提供若干方法的对象通过columns[].editor属性挂载到列上示例中列仍声明为type:text但用editor:customColumn覆盖了编辑与渲染行为。从源码可以确认其方法调用点方法源码调用位置职责openEditor(cell, value, x, y, instance, options, e)src/utils/editor.js进入编辑态清空单元格、插入输入控件、聚焦closeEditor(cell, save, x, y, instance, options)src/utils/editor.js 与 L348-L350结束编辑save为true时返回新值并写回否则恢复原值getValue(cell)单元格取值场景返回单元格当前显示值setValue(cell, value)src/utils/internal.jsupdateCell分支将值写入单元格 DOM此外自定义类型对象还可以非必须提供两个渲染相关方法源码在typeof ... .type object分支中按需调用createCell(td, value, x, y, instance, options)首次创建单元格时的自定义渲染见 createCell。updateCell(element, value, x, y, instance, options)更新单元格值时的自定义处理若返回非undefined的值会覆盖新值见 updateCell。需要注意的是当列定义中type为对象时其渲染走自定义分支createCell 的typeof type object判断因此示例中把自定义列声明为editor:customColumn而非type:customColumn可以继续沿用 text 类型的默认渲染仅替换编辑交互——这体现了editor与type两个挂载点的分工。示例执行流程拆解表格初始化时data2两行数据分别写入Course Title与Time列Time列初始显示14:00、16:30。用户双击Time单元格openEditor被调用创建input、填入当前时间文本、加上editor样式类随后初始化 clockpickerafterHide回调中通过setTimeout延迟调用spreadsheet.closeEditor(cell, true)以避免双重调用即防止时间选择器关闭与失焦事件重复触发保存。用户选好时间或按下 Enter/失焦后closeEditor被调用cell.children[0].value取得输入框的新值写回单元格文本并返回该值Jspreadsheet 将其同步到数据层。从渲染到编辑列类型在源码中的完整生命周期将以上内容串联起来一个列类型的完整生命周期可以概括为三条关键路径全部可在仓库源码中找到对应实现渲染路径createCell 在表格初始化、插入列、更新值时被调用根据列type分派到各内置分支或自定义createCell。编辑路径openEditor 在用户激活单元格时按类型创建对应编辑器input / textarea / jSuites.dropdown / jSuites.calendar / jSuites.color / jSuites.editor / jSuites.image / 自定义openEditor随后 closeEditor 按类型取回值并交由setValue写回。数据路径单元格 DOM 与options.data双向同步——checkbox通过element.checked、dropdown通过getDropDownValue的键值映射、numeric通过掩码解析后的纯数字保证显示形态与底层数据解耦。理解了这三条路径你就掌握了扩展新列类型的全部挂钩点任何插件时钟、评分、滑块、地图等都可以通过实现openEditor/closeEditor/getValue/setValue按需加上createCell/updateCell无缝接入 Jspreadsheet 的列类型体系。延伸阅读Dropdown 与 Autocomplete 列进阶用法多选、远程数据、条件联动、分组图片选项Calendar 日期与时间选择列日期格式、时间选择与国际化配置列定义与列操作源码列宽、列隐藏、列插入/删除/移动单元格渲染与取值源码createCell、updateCell、掩码解析编辑器分发源码openEditor/closeEditor各类型分支赞分享前端UI组件【免费下载链接】ceJspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls.项目地址https://gitcode.com/gh_mirrors/ce/ce点击查看免费下载相关推荐JspreadsheetjExcelv2 列类型实战指南内置列类型、日历与下拉配置、自定义编辑器扩展JspreadsheetjExcelv2 列类型实战指南内置列类型、日历与下拉配置、自定义编辑器扩展 jExcelJspreadsheet v2是轻量前端UI组件Lightweight Charts 系列类型Series Types完整指南内置图表类型、配置项与自定义系列扩展Lightweight Charts 系列类型Series Types完整指南内置图表类型、配置项与自定义系列扩展 本文是 Lightweight Cha前端图表库金融科技数据可视化Doctrine DBAL 数据类型Types完全指南从内置类型到自定义映射类型Doctrine DBAL 数据类型Types完全指南从内置类型到自定义映射类型 导读 本文围绕 Doctrine Database Abstractio数据库后端上一篇告别手写 SQLChat2DB 免费 AI 数据库管理工具一句话生成建表造数语句下一篇GalaxyBook Mask完整指南让三星笔记跑在任意PC上创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表