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 自定义工具栏的主要内容,如果未能解决你的问题,请参考以下文章

VS中添加自定义代码片段——偷懒小技巧

自定义工具栏在片段中不可见

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数