regularjs/regular

watch的bug

Closed this issue · 9 comments

demo示例:

https://codepen.io/henryzp/pen/JRGbbm

当一开始就对c做改变,它会触发所有的$watch的函数,然后导致第一次改它的值,死活不行。之后就正常了。

开始的时候想过,自动聚焦某个model,但不行。一定要某个model变化之后,才ok

现在测试就提了这个bug,请问有什么方法解决吗? @leeluolee @fengzilong

这个需求是计算的值可以修改。

这个不是Bug, 因为watch之后并不会 直接进行检查,(初始是undefined) 而是等下一次digest 阶段, 检查会发现a,b的值是1,2 就触发了watch。你最好放到config之中,因为在config之后会进行一次自动的digest.

而不是扔组件外面去操作数据

@leeluolee ,这样是可以。。但是有一个矛盾点。

比如说c是取决于a+b,c可以修改,将c随意修改成一个值,点击保存,从数据据拉到的值是随意修改的值。但重新渲染时,c并不是用户之前填写的值了,而是a+b的值。

这样一来,无法做区分了,所以我之前的考虑才是那样的,请问有什么好的方案不?

@henryzp 计算结果可修改是什么意思?c有两个变化来源,一个是a和b的变化,另一个是用户输入,你的要求是一旦用户输入,c就和a+b无关了么?

其实官方api就那么几个,如果你都过了一遍,那么能不能拿regular实现某个功能,其实自己心里有数的,最多就是代码写得不优雅些而已

@fengzilong ,是的。。然后当a、b改变时,c又会去做一次计算

其实主要是我说的那个问题,如果能不出现这种情况的话,就OK了。。(因为我用vue测试过,它是不会的,可能两个在写法上有区别吧)

vue基于Object.defineProperty做的,我们是脏检查,本来就表现不一定一致,还有你上面的例子我确实不太清楚你要做什么,你只watch了a和b, 发生改变的时候修改c,这没问题,你修改了c,但你没有去fix它们三者的关系吧? 这是你自己逻辑的缺陷。

@leeluolee ,c是最终者,就是它的值会受制于a或者c,但它本身是可以修改的。。这个业务逻辑就是这样。我新开了一个issue,里面描述的比较清楚。 #121