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

mark

可否提前获取节点 放入变量而不是每次设置的时候去查找getComponent

mark 不错

可以,很不错

这个应该不行,比如说 VMLabel ,可以监听的组件类型有 cc.RichText 和 cc.Label 组件, 这个时候并不知道你需要的是哪个组件,也不能全部暴露到编辑器上。

在onload的中这样获取为什么不行呢,请指教。

这样获取错误的原因可能是 labelType 值没定义,或者 本身没有这个组件。
不过为什么要这样使用呢?这个Mvvm方案 只有两步操作,一个编辑器中绑定组件,一个在代码中 进行 数据的修改操作。 并不需要代码中直接操作组件。

mark

mark一下

挺好,研究下

md fuck 一下

:horse:

mark

码一哈

请教一个问题, 我尝试使用你的MVVM做一个列表界面, 列表项目中的每一个元素预制都是VMParent的子类,并做成了Prefab。

然后有一个列表数据,它是一个数组,内部元素是一个obj有多个字段, VMParent.data以引用的方式指向数组元素,好像不能,如下面:

properties: {
    index: 0,
},
onLoad() {
    this.data = DataManager.getIndex(this.index);
    this._super();
}

我想的是改变DataManager中的数据,让界面也发生改变。

后来根据你的Shop的例子,data没有使用引用的方式,一个个的赋值,不过需要自己实现DataManager中数据更新的通知。

mark~

1.data不能直接引用,因为VMParent 的功能是 在自身绑定一个 ViewModel ,数据也放在自身上。
2.如果你想要更新data里的每一条数据,需要递归遍历一遍对象存在的属性并且赋值。(等于说深拷贝一遍)
3.数组绑定耗性能,而且通常一个配置数据的数组可能有50~100个元素,如果内部元素都是字段obj,会造成严重性能浪费。
所以建议的是,在操作数据数组后自行通知(可以设定一个通知变量,参考技能点例子,就是技能点变化后自动刷新)。

支持一波

厉害了

厉害 ,不过应用场景有点少啊, 游戏UI大多时候不是只单纯刷新UI,数据变化时,一般会有额外表现。 做表现时刷新数据就够了 感觉。