MVVM框架思想
1.MVVM是什么?
M:模型
V:视图
VM:视图模型


简单理解:mvc是一个cell面向一个model开发
mvvm是一个cell面向一个viewModel开发, viewModel里面又包含model
mvvm优点:抽取方法更加的详细,业务逻辑划分更加明确,让控制器更加轻量级
缺点:不利于维护,可读性不太好
2.MVVM框架的使用(以计算不等高cell为例)
上面的分析指导,计算cell高度要在网络请求里面记性
2.1自定义一个topView模型
定义成员属性接收服务器返回(要展示到view上)的数据
2.2自定义一个viewModel模型
先定义一个topView的模型属性,来保存模型数据
在定义一些属性,来保存计算出来的数据(比如:cell的高度和frame)
2.3数据请求成功,先把我们需要的字典数组转成模型数组
2.4再把模型数组转换成 视图模型 数组,并保存起来(定义一个数组成员变量)
// 模型转视图模型
for (XMGThemeItem *item in themes) {
XMGThemeViewModel *vm = [[XMGThemeViewModel alloc] init];
// 计算cell子控件frame和cellH
vm.item = item;
[self.themeViewModels addObject:vm];
注意:给视图模型赋值的时候(vm.item = item;),会触发视图模型成员属性item的set方法
我们就是在item的set方法里面计算cell的frame和高度的,
也就是说,模型全部转为视图模型之后,cell的frame和高度已经全部确定了
只需要在视图模型定义成员属性保存frame和高度,用的这时候直接取就可以了
3.怎么展示数据?
3.1在自定义cell里面定义 一个视图模型来接收数据
3.2在cellForRow方法里面给cell的视图模型赋值(通过从数组中取出对应的视图模型)
cell.vm = _themeViewModels[indexPath.row];
3.3在给cell的视图模型赋值的时候,会触发vm的set方法,会调用vm的set方法
在set方法里面给topView的模型赋值,并取出cell的frame和高度
- (void)setVm:(XMGThemeViewModel *)vm
{
_vm = vm;
// topView:传递模型
_topView.item = vm.item;
// 设置topViewFrame
_topView.frame = vm.topViewFrame;
}
3.4怎么给模型赋值(也就是展示数据)
在setVm方法里面会触发模型的set方法_topView.item = vm.item;
也就是说,这句代码,就把视图模型保存的服务器数据,传递给topView中定义的模型属性
3.5在topView的item的set方法里面,我们完成给cell的子控件赋值的过程
- (void)setItem:(XMGThemeItem *)item
{
_item = item; [_iconView sd_setImageWithURL:[NSURL URLWithString:item.profile_image]];
_nameView.text = item.name;
_timeView.text = item.create_time;
_textView.text = item.text;
}
topView的这些子控件通过从xib连线获得
3.6在哪里给cell的高度赋值?
在heightForRow方法里面
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;0
1 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
XTThemeViewModel *vm = _themeViewModels[indexPath.row];
return vm.cellH;
}
MVVM框架思想的更多相关文章
- MVVM框架理解
MVC框架 将整个前端页面分成View,Controller,Modal,视图上发生变化,通过Controller(控件)将响应传入到Model(数据源),由数据源改变View上面的数据. 整个过程看 ...
- vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想
一:MVVM框架 MVVM框架的应用场景: 1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 ( ...
- “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...
- 不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质
最近前端圈子里面,发现大家都在热炒概念,什么knockout,angularJs,都被捧成神了,鄙人不才,最近心情也不好,特地写这篇文章来找骂 写代码的码农都知道,Java社区虽然不是一个提出分层思想 ...
- 我所知道的MVVM框架(转 司徒大大 )
RubyLouvre commented on 6 Sep 2014 avalon http://avalonjs.github.io/ (使用Object.defineProperties. V ...
- Vue.js-----轻量高效的MVVM框架(一、初识Vue.js)
1.什么是Vue.js? 众所周知,最近几年前端发展非常的迅猛,除各种框架如:backbone.angular.reactjs外,还有模块化开发思想的实现库:sea.js .require.js .w ...
- SPA和MVVM设计思想
Vue基础篇设计模式SPAMVVMVue简介Vue的页面基本使用Vue的全局环境配置基本交互 插值表达式基础指令 v-text v-html v-pre v-once v-cloak v-on MVV ...
- Vue中的MVVM框架
ViewModel:数据双向绑定 场景: 针对具有复杂交互逻辑的前段应用 提供基础的架构抽象 通过Ajax数据持久化,保证前端用户体验 什么是vue.js? 是一个轻量级的mvvm框架 数据驱动+组 ...
- iOS应用千万级架构:MVVM框架
业务模块内的MVC和MVVM架构 目前,唯品会中MVC和MVVM架构并存,后期会偏重于MVVM架构的使用. MVC架构 Model:程序中要操纵的实际对象的抽象,为Controller提供经过抽象的业 ...
随机推荐
- ecshop运行超过30秒超时的限制解决办法
ecshop运行超过30秒超时的限制解决办法 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-04 ecshop运行超过服务器默认的设置30秒的限制时会 ...
- wordpress 添加自定义菜单到管理面板(wp-admin)
如果你在做 wordpress 主题或插件的开发,通常需要在后台dashboard管理面板添加菜单方便用户做主题设置或插件设置.这篇文章要讨论的问题就是怎么样加这个菜单,加在哪里? 添加顶级菜单项 a ...
- 关于Java中文乱码与日期格式
关于Java中文乱码与日期格式 Java中文乱码的问题其实很普遍了,首先,一般不会在Windows平台下面出现,同时,一般在Tomcat应用服务器下也都正常,但是到了WebSphere,Weblogi ...
- MyBatis代码自动生成
MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实 ...
- 【Android测试】【随笔】Bugtags初体验
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5410003.html 前言 早晨接到一个临时任务,就是尝试 ...
- asp.net实现关闭当前网页
asp.net实现关闭当前网页功能:Response.Write("<script>window.close();</script>");// 会弹出询问是 ...
- html5学习测试
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇
.net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...
- JNI字段描述符(转)
转载自http://fgsink.blog.163.com/blog/static/16716997020124310169911/ “([Ljava/lang/String;)V” 它是一种对函数返 ...
- Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver
此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源 ...