找回密码
 立即注册

QQ登录

只需一步,快速开始

Depend
注册会员   /  发表于:2017-3-3 08:58:31
11#
dexteryao 发表于 2017-3-2 15:55
可否举个例子
http://runjs.cn/code/evyclttm
这个Demo您都修改了什么

已解决.这个Demo我只修改了Js的334行:

rbCellType.items(["item1", "item11", "this is a radiocell", "item2"]);

修改为

rbCellType.items(["1", "2", "3", "4"]);

然后它就产生了RadioButton不能选中的异常.
经调试发现RadioButtonCellType 这个对象中的绘制方法 RadioButtonCellType.prototype.paint 中有一个运算式在162行:

if(items === value) ...

因为js是弱类型,但items取出的值类型为String 但这里的value 会变为Number  所以等式永远返回false. 错误由此而生.


评分

参与人数 1金币 +400 收起 理由
Alice + 400 很给力!

查看全部评分

回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-3-3 11:08:54
12#
Depend 发表于 2017-3-3 08:58
已解决.这个Demo我只修改了Js的334行:

rbCellType.items(["item1", "item11", "this is a radiocell", ...

多谢您的反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Depend
注册会员   /  发表于:2017-3-10 10:29:15
13#
本帖最后由 Depend 于 2017-3-10 10:39 编辑

你好,我遇到了一个问题,我从RadioButtonCellType修改了一个CheckboxButtonCellType,如下图:

blob48067625.png

但由于Checkbox需要支持多选,所以我在代码中是这么做的:

blob859331054.png
我添加了values属性来保存checkbox多选状态的多个值.

blob789479980.png
在鼠标mouseUp时,更改this.values集合.
可是这么做引起了一个奇怪的问题,当我复制单元格中内容到其它单元格的时候(拖动单元格复制),如下图:
blob242846984.png
blob687905883.png

这个时候,可以看到一共有三组Checkbox,无论我更改哪组checkbox,其余两组都会跟着一起变化状态.(当我选中第一行的3,那么其余两行也会被自动选中.)

我意识到可能是values同时被三组Checkbox所引用,但我不太清楚我应该在什么地方保存checkbox组的值.

附件是我的代码: CheckboxButtonCellType.js (11.1 KB, 下载次数: 278)
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-10 11:37:27
14#
您不需要新建Values 属性,就直接用value保存值就好了。
因为复制的时候,celltype时同一个,所以values是公用的大家都一样。
可以用getValue获取到oldvalue


  1. CheckboxButtonCellType.prototype.processMouseUp = function (hitInfo) {
  2.     var sheet = hitInfo.sheet;
  3.     if (sheet && hitInfo.isReservedLocation && hitInfo.reservedLocation >= 0) {
  4.         var row = hitInfo.row, col = hitInfo.col, sheetArea = hitInfo.sheetArea;
  5.         var newValue = this._items[hitInfo.reservedLocation];

  6.         //根据checkbox机制,点击时切换选中状态,那么值存在应该移除它,不存在应该添加它 by wgq
  7.         //获取原始value进行改变。
  8.         var oldValues = sheet.getValue(row, col, sheetArea);
  9.         var newValues = oldValue;
  10.         var vindex = oldValues.indexOf(newValue);
  11.         if (vindex>-1) {
  12.             //说明值存在,移除它
  13.             newValues.splice(vindex, 1);
  14.         } else {
  15.             newValues.push(newValue);
  16.         }
  17.         var cellEditInfo = { row: row, col: col, newValue: newValues };
  18.         var undoAction = new spreadNS.UndoRedo.CellEditUndoAction(sheet, cellEditInfo);
  19.         sheet.doCommand(undoAction);
  20.         return true;
  21.     }
  22.     return false;
  23. };
复制代码

评分

参与人数 1满意度 +5 收起 理由
Depend + 5 很给力!

查看全部评分

回复 使用道具 举报
Depend
注册会员   /  发表于:2017-3-10 11:51:15
15#
本帖最后由 Depend 于 2017-3-10 11:52 编辑
dexteryao 发表于 2017-3-10 11:37
您不需要新建Values 属性,就直接用value保存值就好了。
因为复制的时候,celltype时同一个,所以values ...

感谢您提供的代码,问题已解决.  发现了代码中的一个小问题.
  1. var oldValues = sheet.getValue(row, col, sheetArea);       //第一次运行,oldValues为String  
  2. var newValues = oldValue;
  3. var vindex = oldValues.indexOf(newValue);
复制代码

可以改为:
  1. var oldValues = sheet.getValue(row, col, sheetArea);
  2. var newValues = [];

  3. if (oldValues.constructor.name!='Array') {
  4.     newValues.push(oldValues);
  5. } else {
  6.     newValues = oldValues;
  7. }
复制代码


回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-10 15:35:47
16#
您这个对其他用户也会很有用。
回复 使用道具 举报
Depend
注册会员   /  发表于:2017-7-17 13:57:52
17#
dexteryao 发表于 2016-9-28 11:14
您好,请参考 http://runjs.cn/code/evyclttm

请问这个在V10版本中不能用了,是哪里需要修改呢?  我看API 变化列表,好像CustomCellType被移除了?



回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-7-17 14:14:29
18#
Depend 发表于 2017-7-17 13:57
请问这个在V10版本中不能用了,是哪里需要修改呢?  我看API 变化列表,好像CustomCellType被移除了?

您好,这是相应demo的V10版本,您可以进行参考http://runjs.cn/code/wqmlfobx
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部