handsontable学习(4)——具体使用
本文以注释的方式标明了各个属性的功能。
(如果引用的js或者css不能使用了,可自己下载之后引用本地的js和css)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>handsontable测试</title>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/handsontable@7.0.2/dist/handsontable.full.min.css" />
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/handsontable@7.0.2/dist/handsontable.full.min.js"></script>
<script type="text/javascript">
var objectData = [{
id: 1,
name: 'Ted Right',
address: '重庆',
content: '其它'
},
{
id: 2,
name: 'Frank Honest',
address: '北京',
content: '其它'
},
{
id: 3,
name: 'Joan Well',
address: '天津',
content: '其它'
},
{
id: 4,
name: 'Gail Polite',
address: '内蒙',
content: '其它'
},
{
id: 5,
name: 'Michael Fair',
address: '黑龙江',
content: '其它'
},
],
container = document.getElementById('example');
//通过 JSON.parse(JSON.stringify(object)) 的方式,将数据的副本绑定到handsontable,这样handsontable改变数据的时候,不会影响到数据源,只会影响到副本
var dataCopy=JSON.parse(JSON.stringify(objectData));
var hot = new Handsontable(container, {
//调用handsometable的绑定数据的方式是: hot.getData()
data: dataCopy,
//定义数据源为空时,handsontable的数据格式
dataSchema: {
id: null,
name: null,
address: null,
content: null
},
colWidths: 300, //列宽
rowHeights: 83, //行高
//通过定义width和height来决定容器的宽和高,当内容超出时,便会显示滚动条
height: 450,
width: '50%',
//通过设置fixedRowsTop来决定滚动时,锁定的行;通过设置fixedColumnsLeft来决定滚动时,锁定的列
fixedColumnsLeft: 2,
//设置列名
colHeaders: ['', '姓名', '地址', '备注'],
//设置显示行索引
rowHeaders: true,
//许可秘钥
licenseKey: 'non-commercial-and-evaluation',
//留出一行空白,用作新增
minSpareRows: 1,
//隐藏的列索引 例:columns:[0,1,2],隐藏0,1,2三列
//如果需要显示隐藏列的位置标识,可以在hiddenColumns中加上 indicators: true
hiddenColumns: {
columns: [0]
},
//className用作定义表格的对齐方式,多个值用空格隔开
//水平方向上的值: htLeft, htCenter, htRight, htJustify
//垂直方向上的值: htTop, htMiddle, htBottom
className: "htCenter htMiddle",
//定义列和数据源的映射关系和一些其它属性
columns: [
{
data: 'id'
},
{
data: 'name',
// readOnly: true //定义为只读列
},
{
data: 'address'
},
{
data: 'content'
},
],
//当table数据发生改变的相应事件
afterChange: function(change, source) {
//change[0]是一个数组,第一个值是行索引/行名,第二个值是列索引/列名,第三个值是修改前的值,第四个值是修改后的值
//source的值目前知道:loadData(加载数据);edit(新增或编辑)
if (source === 'loadData') {
return;
}
//如果修改的列是ID列,不作处理,防止进入死循环
if(change[0][1]=='id'){
return;
}
if (dataCopy[change[0][0]].id==null) {
console.log("新增");
//生成新列的ID
let mId=new Date().getTime();
hot.setDataAtCell(change[0][0],0,mId);
console.log("新ID:"+mId);
} else {
console.log("修改了ID为:" + dataCopy[change[0][0]].id + "的数据,值由" + change[0][2] + "修改为:" + change[0][3]);
}
}
});
</script>
</body>
</html>
这里只演示了一些常见的功能,更多功能请参考官网API:https://handsontable.com/docs/7.0.2/tutorial-quick-start.html

浙公网安备 33010602011771号