handsontable单元格数据类型自定义

本文介绍了如何在Handsontable中自定义单元格数据类型,特别是创建显示按钮的单元格。在实践中遇到点击单元格导致重复渲染的问题,通过调试找到原因在于自定义类型时错误地添加了子集。解决方法是正确理解和使用自定义函数的参数,如instance、td、row、col等。最后,文章总结了避免重复渲染的关键在于深入理解自定义单元格的参数。

Handsontable支持自定义的单元格类型,查看官方自定义渲染文档说明地址,修改出需要的数据显示类型。

单元格类型自定义的代码:

function safeHtmlRenderer(instance, td, row, col, prop, value, cellProperties) {
    var escaped = Handsontable.helper.stringify(value);
    escaped = strip_tags(escaped, '<em><b><strong><a><big>'); //be sure you only allow certain HTML tags to avoid XSS threats (you should also remove unwanted HTML attributes)
    td.innerHTML = escaped;

    return td;
  }

handsontable设置自定义类型的代码:

container1 = document.getElementById('example1');
  hot1 = new Handsontable(container1, {
    data: data,
    colWidths: [200, 200, 200, 80],
    colHeaders: ["Title", "Description", "Comments", "Cover"],
    columns: [
      {data: "title", renderer: "html"},
      {data: "description", renderer: "html"},
      {data: "comments", renderer: safeHtmlRenderer}, //自定义渲染的名称
      {data: "cover", renderer: coverRenderer} //自定义渲染的名称
    ]

根据上述例子修改为可以显示按钮的单元格类型。设置单个单元格以后,测试使用发现一个问题,只要点击单元格操作,就会重复渲染添加所自定义数据。
问题显示如图:
重复渲染问题
调试发现是自定义数据类型时重复添加子集到单元格的问题,修改后的代码如下:

function btnRenderer(instance, td, row, col, prop, value, cellProperties) {
    var btn = document.createElement('button');
    btn.textContent = value?value:'默认';
    td.innerHTML = "";  // 清空单元格子集
    td.appendChild(btn); //添加按钮到单元格
    return td;
}

设置到对应的单元格的操作:

hot.updateSettings({
    row:2, 
    col:5, 
    renderer:btnRenderer
})

**自定义函数所含的参数:**instance是hansontable的核心方法接口对象,td是要渲染的单元格,row是单元格所在的行,col是单元格所在的列,prop列索引,value是单元格的值,cellProperties是单元格的渲染方法对象。
总结:重复渲染到单元格的问题主要是对自定义函数的参数理解不够。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值