regularjs/regular

watch的bug(用例子说明)

Closed this issue · 7 comments

比如说四个model:

<input r-model={a} />
<input r-model={b} />
<input r-model={c} />
<input r-model={d} />

c的值取决于a+b,c可以修改。

比如说a=1,b=2,c = 3,d = 4。

把c改成5,保存到服务端。

重新打开,a = 1, b = 2, c = 5, d = 4,是对的。

但是当我修改d的时候,c会变成3,因为执行了$watch的计算(准确地说,所有的$watch的function都被触发了一次),可是c的监听者不是a或者b吗?只有当a或者b改变时,c才会变。

这不是bug吗?

从脏值检查原理来看,它不会管watcher内部具体做了什么,但watcher又是变化的来源,所以必须去执行所有的watcher
拿你上面的例子来说,假如a在某处依赖了d呢,虽然你例子不是这样的,但脏值检查不会管这个,它不会去分析你每个watcher里做了什么

那我这个问题,有什么建议不?

感觉regular实现不了我说的这个需求了呀

@henryzp 嗯 实现不了 , 你定义了 c = a+b . 又在某种条件下 不遵守你自己定的规则, 你不觉得有问题?

@leeluolee ,业务是这样的。。我也没办法

https://codepen.io/leeluolee/pen/EgPNmp sync参数可以不触发 undefined->当前值的watcher .

Vue如果可以应该是默认sync, Regularjs默认是触发undefined->当前值,

还有Vue虽然接口层面和Regularjs有一些接近,但是数据模型和模板层面实现都是天壤之别,无论Vue1还是Vue2, 所以最好能仔细看下Regularjs本身的文档

@leeluolee ,谢谢你的demo。。顺利搞定了