MVVM模式中ViewModel和View、Model有什么区别?


Posted in Javascript onJune 19, 2015

Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。

View:也很简单,就是展现出来的用户界面。

基本上,绝大多数软件所做的工作无非就是从数据存储中读出数据,展现到用户界面上,然后从用户界面接收输入,写入到数据存储里面去。所以,对于数据存储(model)和界面(view)这两层,大家基本没什么异议。但是,如何把model展现到view上,以及如何把数据从view写入到model里,不同的人有不同的意见。

MVC派的看法是,界面上的每个变化都是一个事件,我只需要针对每个事件写一堆代码,来把用户的输入转换成model里的对象就行了,这堆代码可以叫controller。

而MVVM派的看法是,我给view里面的各种控件也定义一个对应的数据对象,这样,只要修改这个数据对象,view里面显示的内容就自动跟着刷新,而在view 里做了任何操作,这个数据对象也跟着自动更新,这样多美。所以:

ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。

至于viewmodel的数据随着view自动刷新,并且同步到model里去,这部分代码可以写成公用的框架,不用程序员自己操心了。

简单的说,ViewModel就是View与Model的连接器,View与Model通过ViewModel实现双向绑定。

Javascript 相关文章推荐
FormValid0.5版本发布,带ajax自定义验证例子
Aug 17 Javascript
javascript JSON操作入门实例
Apr 16 Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
jQuery prev ~ siblings选择器使用介绍
Aug 09 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
详解tween.js的使用教程
Sep 14 Javascript
js实现搜索栏效果
Nov 16 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
Jun 19 #Javascript
使用AngularJS编写较为优美的JavaScript代码指南
Jun 19 #Javascript
javascript格式化日期时间方法汇总
Jun 19 #Javascript
JavaScript中数据结构与算法(四):串(BF)
Jun 19 #Javascript
JavaScript中数据结构与算法(三):链表
Jun 19 #Javascript
js结合正则实现国内手机号段校验
Jun 19 #Javascript
JavaScript中数据结构与算法(二):队列
Jun 19 #Javascript
You might like
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
php array的学习笔记
2012/05/10 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
js常见表单应用技巧
2008/01/09 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
javascript self对象使用详解
2016/10/18 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
茶叶店创业计划书范文
2014/01/19 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
铁路安全事故反思
2014/04/26 职场文书
交通文明倡议书
2014/05/16 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
留学推荐信怎么写
2015/03/26 职场文书
python_tkinter事件类型详情
2022/03/20 Python
python blinker 信号库
2022/05/04 Python