背景:
最近遇到比较多这样的需求:
终端用户需要随机拖拽或选择一些条件,对应地钻取到一组数据,
然后按用户喜好,放置到Sheet表单中选中的位置上。
一个sheet中可能有很多块不同的数据区域,而且位置和范围取决于用户钻取的数据。
这个需求听起来好像不难,就是拿到数据、设置到sheet中即可。
但仔细分析,就会发现里面其实有一些潜在的陷阱,一不小心就会让开发工作变成一场灾难。
首先,SpreadJS针对在sheet表单的局部区域绑定list类型的数据给出的解决方案是表格绑定,
也就意味着需要在用户选择的地方先放一个table表格,再把数据绑定进来。
SpreadJS为了避免表格绑定执行时覆盖其它有效区域,
都是通过addRows的方式添加(或删除)行的方式来给进来的数据提供容器,
那么有个现实的问题,当不同的table处于同一行时,势必会相互影响。导致数据源被改动。
在SpreadJS中有一个resize方法,可以改变table的覆盖区域,
我们在拿到数据源时,可以先resize一下table的覆盖区域,再做数据绑定,就不会出现行冲突的情况。
示例代码如下:
- sheet.tables.resize(table, range1);
复制代码
完整的代码参考附件。
如果有小伙伴比较喜欢深究,仔细想想会发现,这个办法也不能完全解决问题。
那具体应该怎么办呢?可以参考我的公开课:《SpreadJS表单设计 —— 常见问题解析》
地址:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=54505&extra=page%3D1%26filter%3Dtypeid%26typeid%3D274
|
|