找回密码
 立即注册

QQ登录

只需一步,快速开始

@city_CH2017

注册会员

7

主题

64

帖子

121

积分

注册会员

积分
121

微信认证勋章

@city_CH2017
注册会员   /  发表于:2019-9-10 20:21  /   查看:8303  /  回复:14
1金币
效果:点击单元格获取单元格的坐标,用绝对定位把放大镜放在单元格右侧(见图3)。
我已现在已经通过 "getCellBoundingRect" 获取到坐标(见图1),显示正常情况下把FlexGrid表格封装成Vue组件。在调用组件的时候,发现通过“getCellBoundingRect”获取坐标已经不准确了(见图2)。

(图1)
(图2)
(图3)
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

15 个回复

正序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-9-19 16:05:51
15#
您好,实际上在编辑时,format是不会影响数据源的,您可以参考示例:

https://demo.grapecity.com.cn/wi ... nding/Basics/purejs

如果我理解有误,请指出
回复 使用道具 举报
@city_CH2017
注册会员   /  发表于:2019-9-19 11:12:58
14#
KevinChen 发表于 2019-9-10 20:22
您好,咱们可以换个逻辑实现:

还有个小问题:FlexGrid Column使用format属性进行格式化内容。在编辑模式下,新增和修改的数据数据也会受到format格式化的影响。我想问怎么让编辑的数据(数据源,也就是itemsAdded,itemsEdited,itemsRemoved),不受到format的影响,但表格内容会格式化
回复 使用道具 举报
@city_CH2017
注册会员   /  发表于:2019-9-18 18:39:49
12#
本帖最后由 @city_CH2017 于 2019-9-18 18:43 编辑
KevinChen 发表于 2019-9-18 16:24
您好,这个问题已经解决了,关键代码如下:
完整的Demo已经上传到附件中,请下载运行参考。

非常感谢管理员的解答。但我下载了demo,发现在出现滚动条的时候,还是会出现不对齐现象。

如果获取相对于FlexGrid层的坐标,那么我使用滚动条的时候,小方块会随着Cell高度而发生变化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-9-18 16:24:17
11#
您好,这个问题已经解决了,关键代码如下:
  1. flex.addEventListener(flex.hostElement, 'click', (e) => {
  2.         let $hit = flex.hitTest(e)
  3.         let $rowIndex = $hit.row
  4.         let $colIndex = $hit.col
  5.         if(Math.sign($rowIndex) === -1 || Math.sign($colIndex) === -1){
  6.           return false
  7.         } // 判断负数

  8.         /* 显示(放大镜)帮助索引 */
  9.                 // 这里需要传入第三个参数true,获取到的才是相对于flexGrid层的坐标
  10.         let rcCell = flex.getCellBoundingRect($rowIndex, $colIndex, true) // 单元格坐标
  11.                 /*
  12.         let rcBody = document.body.getBoundingClientRect() // body坐标
  13.         let ptOffset = new wjcCore.Point(-rcBody.left, -rcBody.top)// 新坐标
  14.         this.helpIndex = {
  15.           left: rcCell.left - 1 + ptOffset.x + 'px',
  16.           top: rcCell.top - 1 + ptOffset.y + 'px'
  17.         }
  18.                 */
  19.                 // 这里需要加上单元格的宽、高度,再加上图标本身的宽度38
  20.         this.helpIndex = {
  21.           left: rcCell.left + rcCell.width + 38 + 'px',
  22.           top: rcCell.top + rcCell.height + 'px'
  23.         }
  24.                
  25.         // console.log('坐标', rcCell.left - 1 + ptOffset.x, rcCell.top - 1 + ptOffset.y)
  26.       })
复制代码
完整的Demo已经上传到附件中,请下载运行参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-9-17 17:55:52
10#
好的,您的问题正在分析处理,预计明天之内给您答复~
回复 使用道具 举报
@city_CH2017
注册会员   /  发表于:2019-9-17 10:52:53
9#


已上传Demo,你查看一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-9-12 08:39:12
8#
好的,您发一个Demo,我这边排查一下问题
回复 使用道具 举报
@city_CH2017
注册会员   /  发表于:2019-9-11 14:22:24
7#
KevinChen 发表于 2019-9-11 11:54
这个不行,元素只能放在cell内部,外侧属于另一个cell的区域,会盖住前一个cell的内容。

那就只能通过getCellBoundingRect 获取单元格坐标,使用绝对定位来显示了。我整理一下demo发给你
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-9-11 11:54:37
6#
@city_CH2017 发表于 2019-9-11 11:23
条件样式可以把“放大镜”这个元素放在外面吗?也就是输入框右侧外面吗?

这个不行,元素只能放在cell内部,外侧属于另一个cell的区域,会盖住前一个cell的内容。
回复 使用道具 举报
@city_CH2017
注册会员   /  发表于:2019-9-11 11:23:49
5#
KevinChen 发表于 2019-9-11 09:59
您好,您的这个业务场景,我觉得是否可以考虑一下条件样式来实现呢?比如这个例子您参考一下看看:

http ...

条件样式可以把“放大镜”这个元素放在外面吗?也就是输入框右侧外面吗?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部