x-spreadsheet 自定义工具栏
Posted adolph
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了x-spreadsheet 自定义工具栏相关的知识,希望对你有一定的参考价值。
最近公司有一个新的需求,需要对一个列表进行在线编辑并导出.但是我们也没有在线编辑excel的经验,所以就找了一个网上比较火的x-spreadsheet的js库. 原文地址. 不得不说这个11k的项目的强大.但是工具栏也忒少了.我想要的导出也没有.无奈之下,只能clone源码来进行二次开发了.下面记录我的开发过程以及主要修改的js文件.
目录
├── algorithm // 算法
├── canvas // 画图
├── component // 组件
│ ├── toolbar // 工具栏
├── core // 核心代码
├── index.less // 入口css
└── locale // 国际化
我们先大概了解一下目录,这次主要是工具栏.所以就得先处理一下工具栏的代码.
增加工具栏图标
了解了目录,我们直接参考一个redo.js直接搞一个.
// component/toolbar
import IconItem from \'./icon_item\';
export default class Save extends IconItem {
constructor() {
super(\'save\', \'Ctrl+S\');
}
}
在component/toolbar/index.js中直接引入
import Save from \'./save\';
this.saveEl = new Save(), // 99行
这样就引入了我们的js了.
处理样式
我们引入了过后,其实我们还没有设置对应的图标.在index.less中加入如下的语句
&.save{
left: -3 * @icon-size;
top: -1 * @icon-size;
}
即可增加我们的图标展示. 所有的图标都在外层的assets目录下.
事件绑定
我们有了这个过后,就需要绑定我们的事件了.我们这里主要是使用了快捷键. ctrl + s.或者点击保存也可以保存.那我们就需要在工作表里面的keydown事件增加ctrl+s组合键.
// component/toolbar.js 138行
this.saveEl = buildButtonWithIcon(`${t(\'toobar.save\')} (Ctrl+S)`, \'save\', () => this.change(\'save\')),
这样我们就绑定了一个save. 但是对应的处理方法还没有处理. 所以,我们需要在this.change里面去处理这个方法. 而这个this.change则是在toolbar初始化的时候,加上的.我们可以在sheet.js的600行左右看到如下代码
toolbar.change = (type, value) => toolbarChange.call(this, type, value);
所以,我们只需要处理toolbarChange这个方法即可了.
// 在534行左右增加如下代码.
else if (type === \'save\') {
this.trigger(\'saved\', this);
}
这个表示直接触发saved事件. 外部只需要监听这个事件即可了.
处理事件
xs.on(\'saved\', function(){
// 这里书写自己的导出方法即可.
});
导出的方法官网上也有. 可以参考这个链接.
https://github.com/SheetJS/sheetjs/tree/master/demos/xspreadsheet#saving-data
即可完成导出.
以上是关于x-spreadsheet 自定义工具栏的主要内容,如果未能解决你的问题,请参考以下文章