请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

小胖子

初级会员

25

主题

81

帖子

284

积分

初级会员

积分
284
小胖子
初级会员   /  发表于:2019-11-5 17:46  /   查看:3757  /  回复:8
我是gc.spread.sheets.all.10.0.1.min.js这个版本的包
Rep.spread.fromJSON(JSON.parse(item.modelDataString),{doNotRecalculateAfterLoad:true})
写了这个打开,doNotRecalculateAfterLoad这个没反应?这个属性不就是设置不重算自定义公式的吗?
问题是还进去了
xxx.prototype.evaluate = function (args) {
                    return "0";
            }
进入到这个方法里面了,完后设置成了0,但是实际我的ssjson数据里面这个公式对应的value是有值的,这个怎么处理呢?



8 个回复

Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-11-5 18:12:58
沙发
这个只是导入之后不立刻进行重新计算公式,当你的操作行为触发了公式的重计算时还是会进行重计算的
回复 使用道具 举报
小胖子
初级会员   /  发表于:2019-11-5 19:02:13
板凳
ClarkPan 发表于 2019-11-5 18:12
这个只是导入之后不立刻进行重新计算公式,当你的操作行为触发了公式的重计算时还是会进行重计算的

我就是导入了,我啥也没干,它导入完成自己就进入公式那个方法了呀,我现在就是想看数据本身的值呢,这个属性不顶事呀
回复 使用道具 举报
小胖子
初级会员   /  发表于:2019-11-5 19:30:12
地板
小胖子 发表于 2019-11-5 19:02
我就是导入了,我啥也没干,它导入完成自己就进入公式那个方法了呀,我现在就是想看数据本身的值呢,这个 ...

问题1.好像我要是把自定义公式那些写法去掉以后,导入的ssjson,里面的自定义公式就不知道是啥了,显示的#name是吧,
问题2.我就是相让一开始导入完就显示的是ssjion数据里面的那个自定义公式对应的值
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-11-6 09:55:28
5#
#name是因为你导入自定义公式后,你新的SpreadJS对应的作用域中并没有或者找不到该自定义公式的计算逻辑,也就是下图所示的这部分代码,因为json序列化只会序列化自定义公式的名称,不会将计算逻辑也序列化到json中,所以反序列化操作后必须有对应的计算逻辑。

这里有两种情况,如果是没有,则需要在对应的Spread对象中注册同样的计算逻辑。
如果是找不到,那么推测应该是没有给自定义方法设置typename,详见自定义特性序列化
https://demo.grapecity.com.cn/sp ... temSerialize/purejs

本帖子中包含更多资源

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

x
回复 使用道具 举报
小胖子
初级会员   /  发表于:2019-11-6 10:34:00
6#
ClarkPan 发表于 2019-11-6 09:55
#name是因为你导入自定义公式后,你新的SpreadJS对应的作用域中并没有或者找不到该自定义公式的计算逻辑, ...

Rep.spread.fromJSON(JSON.parse(item.modelDataString),{doNotRecalculateAfterLoad:true})
我就问这个属性为啥不顶事,我啥也没干,导入以后自己就重算了,我啥也没动我啥也没操作,就是导入以后自己重算了,这个属性不是不重算的意思吗,我这不顶事,没反应,我要一进来不重算的效果呢。什么问题呢现在是?
回复 使用道具 举报
小胖子
初级会员   /  发表于:2019-11-6 10:45:22
7#
小胖子 发表于 2019-11-6 10:34
Rep.spread.fromJSON(JSON.parse(item.modelDataString),{doNotRecalculateAfterLoad:true})
我就问这个 ...

我跟了自己的代码走完这句话
Rep.spread.fromJSON(JSON.parse(item.modelDataString),{doNotRecalculateAfterLoad:true});
立马就进入到了对应的公式这个方法里面了
XXXX.prototype.evaluate = function (args) {
               
            }

回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2019-11-6 14:17:40
8#
你好,未能复现您描述的情况,可以提供一个Demo
我传的附件里 写了0,0,位置写了一个自定义函数,返回值111,导出ssjson文件,

再导入,将该自定义函数这是返回值222,设置不重算的时候,会是ssjson中的原始值111,设置重算后,是新的222,你可以再排查下你的代码

本帖子中包含更多资源

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

x
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-11-6 18:18:05
9#
小胖子 发表于 2019-11-6 10:34
Rep.spread.fromJSON(JSON.parse(item.modelDataString),{doNotRecalculateAfterLoad:true})
我就问这个 ...

看我上面的回复,要么你没做序列化处理,要么作用域中没有自定义计算的对应逻辑,跟doNotRecalculateAfterLoad没有关系,设置不设置都会这样,因为doNotRecalculateAfterLoad不代表公式就不生效了,而是说导入后不进行重新计算来校验计算结果是否正确,后面如果触发公式计算的相关条件还是会计算的。所以既然如此,公式引擎肯定要在导入后验证公式的正确性以便于后面可能进行的计算,那么问题来了,上面我所说的两点你这边肯定至少缺少了其中的某一点。正确性都无法通过那肯定是#name啊,如果上来显示了值,当触发计算的时候突然变成了#name这不是很奇怪吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部