理解MVVM
- View
由MVC中view和controller组成,负责UI的展示,绑定viewmodel中的属性,触发viewmodel中的命令。 - viewModel
从MVC的controller中抽取出来的展示逻辑,负责从model中获取view所需药的数据,转换成view可以展示的数据。并暴露公开的属性和命令供view进行绑定。 - model
与MVC中的model一致,包括数据模型,访问数据库和网络操作请求。 - binder
在view和viewModel的同步,避免大量繁杂的样板代码。
下图是个人理解
- controller
持用view对象和viewmodel,通过bindview:viewmodel:方法将view中控件和viewmodel中的数据进行绑定(利用RAC)。 - model
请求服务端数据和本地数据库数据依然在model中操作。
Demo
一个输入框和一个按钮。当用户输入了电子邮箱地址、点击订阅按钮后,电子邮箱地址会提交到web服务器上。邮箱地址有效的才能点击订阅。
我们先来看双绑的实现
- (void)bindWithViewModel {
//将viewmode的email属性与文本框输入的内容绑定
RAC(self.viewModel, email) = self.emailTextField.rac_textSignal;
//订阅按钮响应
self.subscribeButton.rac_command = self.viewModel.subscribeCommand;
//将self.statusLabel的text属性与viewmodel中的statusMessage绑定
RAC(self.statusLabel, text) = RACObserve(self.viewModel, statusMessage);
}
参考资料
http://blog.leichunfeng.com/blog/2016/02/27/mvvm-with-reactivecocoa/
http://blog.csdn.net/womendeaiwoming/article/details/37597779