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

js demo 运行有点问题,js脚本下的两个子节点VMLabel的onLoad方法会先执行,此时js脚本还没调用VMparent的onLoad方法,暂时不知道为什么子节点的onLoad会比父节点的onLoad执行快

mark

这个是反着来的,通过 VMEvent 可以在数据变动时,设置回调调用绑定在UI上的其他脚本方法。
比如获得了100金币 > 检测金币数值发生变化 >调用粒子播放>调用AudioSource 播放音频。
这样的优点是,程序只要写数据操作。剩下的交互和效果都可以放到编辑里处理(方便策划或者美术来配置改动),
而且你只要在任何地方 修改金币,都会触发效果,不用每个地方去调用UI刷新。

GitHub 新版本修复了问题,把值初始化放到 start()函数里处理了,避免onLoad 的顺序问题。
你也可以直接修改VMLabel 的代码:

onLoad(){
    ...
    //this.onValueInit(); //删除
}
...
start(){
  if(CC_EDTIOR)return;
    this.onValueInit();
}

请教一下VMCompsEdit 组件的用意和使用方法,看Demo没太懂:joy:

mark

VMCompsEdit 用途是在编辑器里 自动搜索该节点下的 VM相关组件,批量搜索/激活/关闭/删除 VM相关组件,
批量替换 watchPath 的路径,减少部分人工操作。(插件不会做就弄了个这样的组件代替一部分功能)

mark

现在 我改了 加上 属性装饰器 代码绑定 数据事件 这样 也可以做到 不需要操作 编辑器 绑定. 对程序员来说 爽一点

mar

你好,我使用

绑定数据,然后userData里面有个setting属性

ui这样绑定

无论怎么改变setting的值,都不能反馈到ui上,请问这种情况应该怎么处理呢,

@wsssheep

666666666666MARK

VMState 监听的状态脚本是不是 挂在 off 节点上? 如果节点本身 active === false 了,那NODE_ACTION 这个切换条件不会执行的,先切个别的条件试试。当然也可能有别的情况,但是这个图我看不出来,可以的话给个例子的话我比较好看看问题的原因。

mark,高人,这些年都没碰一丁点设计模式的表示很惭愧

大佬666,mark

mark

mark

你这个vue的叛徒:yum:

VMLable.ts,判断this.originText是否null,否则编辑器要报错,增加if(!this.originText) return;