dgflash / oops-plugin-framework

oops-framework-plugin 是基于 Cocos Creator 3.x 以插件形式使用的游戏框架,此版本框架代码与游戏具体业务逻辑代码分离,方便在项目开发过程随时更新框架最新版本代码。
MIT License
28 stars 17 forks source link

JsonOb 属性变更,为什么要先抛事件再赋值? #4

Open hello-soon opened 3 days ago

hello-soon commented 3 days ago

JsonOb 属性变更,为什么要先抛事件再赋值?

                set: function (newVal) {
                    if (oldVal !== newVal) {
                        if (OP.toString.call(newVal) === '[object Object]') {
                            self.observe(newVal, pathArray);
                        }
                        self._callback(newVal, oldVal, pathArray); // 先post onValueChanged
                        oldVal = newVal; // 再赋值
                    }
                }

问题场景: VMStateVMLabel同时watch同个path。 VMStateonValueChanged中, 设置 active=true, 触发VMLabel.onEnable VMLabel.onEnable触发VMLabel.onValueInit VMLabel.onValueInit中通过 this.VM.getValue(this.watchPath)获取的数据还是旧的 导致这次变的数据没有更新到ui上