主要疑问在于View层和ViewModel层的职责明确
ViewModel层承载的是逻辑和状态。其中状态包括什么?包括逻辑数据(比如User这样的数据)和UI状态(比如isLoading)吗?
User这样的数据,应该放在ViewModel层。那么类似isLoading等等的控制某些UI是否显示的变量也应该放在ViewModel层吗?
疑惑主要在于什么是UI什么是逻辑?他们的界限是什么?
另外ViewModel层能否直接弹出一个弹窗?比如我处理完一段逻辑,需要弹窗确认,我需要把结果先返回到View层,让View层来弹,还是直接ViewModel层弹合适?
其实不用这么抠那些概念,mvvm最大的一个特点就是数据绑定,可以双向绑定数据,数据就是存储在ViewModel层,ViewModel层承载的所谓状态,就是view层绑定的数据,包括单项和双向绑定的数据,自然可以包括UI状态和业务逻辑数据,但业务逻辑数据一般都被转化为适合数据绑定的形式,而不是保持它们在model中的形式,在model中数据是以方便业务逻辑层处理形式存在,所以ViewModel的职责之一就是把model中的数据转为方便绑定的形式。
一般的,你可以理解为,逻辑数据从model层加载,而UI状态则由viewmodel自身创建并初始化。
因为viewModel负责处理UI事件,所以你要让viewModel弹出一个窗口也是合理的做法。view层不能弹出窗口,一般view层都是静态的没有逻辑,比如在vue/angular中view层都是html,html没法弹出窗口,它只能把事件绑定到viewModel中的函数。