SpreadJS 复选框单元格的优化

复选框单元格是SpreadJS(以下简称SJS)常用的一种单元格类型,常见的复选框有checkbox,radiobutton等等。一般情况下初始化后用setCelltype方法为指定单元格设置该类型,像这样:

发布于 2017/05/16 00:00

复选框单元格是SpreadJS(以下简称SJS)常用的一种单元格类型,常见的复选框有checkbox,radiobutton等等。

一般情况下初始化后用setCelltype方法为指定单元格设置该类型,像这样:

image

那么这里存在一个小问题,当快速的点击目标单元格多次,导致样式改变(不同的浏览器改变样式不同)。

image

当鼠标推出单元格选中状态后样式又变回来了。

image

这样表面上没有什么问题,只是用户体验不太好。

但是下面的场景下就会出现问题:

场景是这样的,需要做一个联动的checkbox,选中一个另外一个状态跟着变化,像这样:

当快速点击checkbox时,导致在选中过程中的点击无法被另一个单元格同步,像这样:

3643746746

不仅样式会发生变化,而且逻辑也会出现问题,根本无法使用。

那么,造成这样的问题的原因是什么呢?

原因是因为自定义单元格始终是单元格,是可以被编辑的。点击过快就会是单元格进入编辑状态,这个功能在checkbox中是不需要的。

所以我们需要在单元格点击时候去判断当前sheet是不是处于编辑状态,如果处于编辑状态我们需要去结束编辑状态。

那么怎样去判断呢?

首先我们需要确定判断的时机,也就是单元格被点击时。

所以我们需要绑定ButtonClicked事件,但是buttonclicked点击其他单元格也会被触发,所以还需要进行区分

区分的方法根据业务逻辑的不同而不同,这里我是用单元格的类型进行区分判断。

spread.bind(GC.Spread.Sheets.Events.ButtonClicked,
        function(e, args) {
			var sheet = args.sheet,
				row = args.row,
				col = args.col,
				cellType = sheet.getCellType(row, col);
			if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {
 
			}
        }
);

之后在判断中填写我们核心的逻辑,终止编辑。

if(sheet.isEditing()){
    sheet.endEdit(true);
}

之后问题就解决了

1963873782

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的开发者社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态