感觉用代码控制UI浪费人生,于是整了个新的MVVM方案……

真的秀啊啊啊!

Mvvm都差不多,要理解的话就是: VM组件与数据直接绑定 ,监听到值变化,VM组件会控制其他脚本组件或者节点 自动修改对应属性或者状态。
之前考虑直接通过继承cc.Label 的方式 来绑定数据,但是拓展性差,于是最后发展成这样一套 用组件控制组件的方案。

mark

mark

mark

mark

楼主,我下了你的代码研究,然后刚看到JsonOb.ts
自己研究看了代码发现是将数组和对象一个个拆到最里面然后监听,然后我有一个疑问就是,数组单个值得变更是有没有监听的呢,比如a[2] = 1这样,如果有的话,是怎么监听的呢?

数组的话,也是一个对象,也可以使用 Object.defineProperty(array,0,{get:..,set:..}) 的方式来设置对应 index 的 get/set 函数。也就是说 你可以把 [5,10,30] 看成 {"0":5,"1":10,"2":30}
不过数组 push /splice 等方法 会创建新的值,因此需要重写 数组方法来进行特殊处理
PS: 不建议监听 包含有大量对象数据的 数组,会影响性能, 数组只保存对应数据 id 的映射比较好 (参考MvvmShop 里的例子)。

mark

谢谢楼主解答,我再研究一下看看

mark

火钳刘明。

1赞

mark

mark

mark too

插眼mark

mark

mark

mark