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

1.用了VMParent, VMLabel cocosCreator编辑器不能自动识别内容,会显示undefined。
2.VMLabel使用Template Mode,cocosCreator编辑器会报错,运行时是正常的。你的事例中也会出现这样的问题。

1.显示做了保护

2.加上保护

厉害Mark学习

mark 界面设计

this.originText 我加个保护,不过 setLabelValue 那里不需要,不然不好找 undefined的情况.

先码了再说

mark

请教一个问题,使用 NODE_ACTIVE 将节点隐藏后,当监听的watch path变量变化,节点不没显示出来。

我调试了一下源码,发现在emit 事件时,没找到监听响应函数.

是不是节点的Active为false后事件被移除了,没有再次绑定?

我发现问题了, VMState组件,在禁用节点后,执行了onDisable 把事件监听给关闭了!!
我在VMState下改几行代码:

 onEnable() {
        if (this._flag && this.valueAction === ACTION.NODE_ACTIVE) {
            return;
        }
        this._flag = 1;
        super.onEnable();    
    }

    onDisable(){
        if (this.valueAction === ACTION.NODE_ACTIVE) {
            return;
        }
        super.onDisable();
    }

onDisable 在设计上,就是要关闭值的监听的,所以不建议这样改
如果要监听切换节点 的NODE_ACTIVE 状态,建议由父节点来控制,而不是由节点自身控制。
如果只是要切换显示隐藏关系可以 使用 NODE_VISIBLE

有一个很常用的功能是 条件1满足 显示A 隐藏B, 否则隐藏B显示A 这样的话我现在得加2个VMState分别控制,改怎么优化呢,

工程里面有一个 BhvSwitchPage 脚本 改变index值 可以切换唯一节点显示 , 可以配合VMState / VMCustom 组件使用。
或者用VMState 的 for each child name 模式判断,但是要修改 子节点的名字作为判断条件的 值。

mark

感谢你的解答

非常感谢.

mark

mark

之前用过unity uframe mvvm框架。遇到的问题是,如果ui上要显示的值是要动画变化的。比如hud金币数要按飞入的金币增长。或者经过一个变化的过程。是不是就要为此行为另行添加一个vm中的显示值了呢?让观察者监听到这个值去变化ui

把增加金币的数据操作 放在 飞入金币动画完成之后处理 就可以实现一个变化的过程了