Lynn.Dou 发表于 2021-1-26 09:58:53

SpreadJS在线表格编辑器自定义功能 -- 新建工具栏下拉选项(Ribbion ComboBox)

本帖最后由 dexteryao 于 2021-2-3 13:59 编辑

前言:在上节中我们介绍了如何在组件版设计器中自定义CheckBox,本节课我们继续来学习 如何自定义ComboBox下拉组合框。


1. 介绍 ComboBox

在组件版设计器中,我们在工具栏中会看到如下图所示的组合框。选择下拉列表项 即可设置相应的值。
在控制台我们可以打印出 ComboBox“字号”的默认配置信息,可供我们参考自定义ComboBox


---------为方便演示,我们首先新建一个Ribbon 选项卡来放置自定义的ComboBox。----------

2.增加新Ribbon 选项卡

在上节课中我们已经介绍了如何增加新Ribbon 选项卡,这里不再赘述。

3.自定义ComboBox

整体思路与自定义 Checkbox 一致,我们以具体的代码来演示下。
实现功能:收缩打印输出的宽度,使之适合特定的页数。
通过 点击Checkbox 下拉项,来设置这一特定的页数。

(1)在定义ComboBox之前,我们先定义 点击ComboBox下拉项 的命令Commands。

var ribbonPrintCommands = {
   "setFitPagesWide": {
      text: "自动",
      comboWidth: 60,
      type: "comboBox",
      commandName: "setFitPagesWide",
      dropdownList: [
            {
                text: "自动",
                value: "-1"
            },
            {
                text: "1",
                value: "1"
            },
            {
                text: "2",
                value: "2"
            }
      ],
      execute: async (context, selectValue) => {
            if (selectValue != null && selectValue != undefined) {
                setTimeout(() => {
                  let sheet = context.Spread.getActiveSheet();
                  var printInfo = sheet.printInfo();
                  printInfo.fitPagesWide(parseInt(selectValue));
                  sheet.printInfo(printInfo)
                }, 0);
            }
      },
      getState: (context) => {
            let sheet = context.Spread.getActiveSheet();
            var printInfo = sheet.printInfo()
            var value = printInfo.fitPagesWide();
            return value.toString();
      }
    },

    "setFitPagesTall": {
      text: "自动",
      comboWidth: 60,
      type: "comboBox",
      commandName: "setFitPagesTall",
      dropdownList: [
            {
                text: "自动",
                value: "-1"
            },
            {
                text: "1",
                value: "1"
            },
            {
                text: "2",
                value: "2"
            }
      ],
      execute: async (context, selectValue) => {
            if (selectValue != null && selectValue != undefined) {
                setTimeout(() => {
                  let sheet = context.Spread.getActiveSheet();
                  var printInfo = sheet.printInfo();
                  printInfo.fitPagesTall(parseInt(selectValue));
                  sheet.printInfo(printInfo)
                }, 0);
            }
      },
      getState: (context) => {
            let sheet = context.Spread.getActiveSheet();
            var printInfo = sheet.printInfo()
            var value = printInfo.fitPagesTall();
            return value.toString();
      }
    },

}
上面代码注册了 setFitPagesWide、setFitPagesTall命令。接下来我们来具体分析代码各部分的作用。
text 为显示文本。
type 为命令类型,本例中为comboBox。
iconClass 为comboBox样式,可以制定comboBox图片。
commandName 为命令名称,需要全局唯一。
dropdownList 中设置下拉项的text值和value值。
comboWidth 为组合框的UI宽度。
在 execute 中定义具体执行内容的function,本例中使用 fitPagesTall方法 来设置打印时的水平页数 。
在 getState 中控制组合框的显示文本。

(2)将命令 setFitPagesWide、setFitPagesTall 添加至对应的 config 中。



var ribbonPrintConfig = {
    "label": "页面布局",
    "thumbnailClass": "ribbon-thumbnail-spreadsettings",
    "commandGroup": {
      "children": [
         {                "direction": "vertical",
                "commands": [
                  {
                        iconClass: "ribbon-button-namemanager",
                        text: "宽度",
                  },
                  {
                        iconClass: "ribbon-button-namemanager",
                        text: "高度",
                  }
                ]
            }
      ]
    }
}

(3)将命令注册到config的commandMap属性上。
designerConfig.commandMap = {};
Object.assign(designerConfig.commandMap, ribbonPrintCommands );


(4)在designer的config中加入自定义的命令和按钮
customerRibbon.buttonGroups.push(ribbonPrintConfig );
designerConfig.ribbon.push(customerRibbon);

var designer = new GC.Spread.Sheets.Designer.Designer(
    document.getElementById('ssDesigner'), /**designer host */
    designerConfig,// designerConfigJson /**If you want to change Designer's layout or rewrite it, you can pass in your own Config JSON */ ,
    undefined /**If you want to use the spread you already created instead of generating a new spread, pass in */
);
这样我们自定义的ComboBox可以正常工作了。









页: [1]
查看完整版本: SpreadJS在线表格编辑器自定义功能 -- 新建工具栏下拉选项(Ribbion ComboBox)