mvvm到底是个什么玩意

说道mvvm, 这玩意出来也有些时间了, 也有很多类库,
如: avalon,knockoutjs, AugularJS等等, 当然这块我了解的比较晚,
之前对这玩意也不是很了解, 也只是用avalon做过一个小项目,  仅知道这货可以做数据驱动, 很方便,
上周听了同事的分享发现mvvm这货能做的事不仅仅只是数据驱动, 还有很多东西都可以做, 觉得非常有意思, 所以想到要写点东西, 讲了这么多废话,
下面准备了个简单的例子,

点击显示让提示语显示, 点击隐藏将提示语隐藏, 需求很简单, 我相信很多人拿到这个需求可能会这样写:


<div class="container">
<h1>mvvm示例</h1>
<div id="msg" class="row">hello world!</div>
<div class="row">
<input id="btnShow" type="button" value="显示" />
<input id="btnHide" type="button" value="隐藏" />
</div>
</div>


    var MV = {
init: function(){

this.ui = {};
this.ui.msg = $(‘#msg‘);
this.ui.btnShow = $(‘#btnShow‘);
this.ui.btnHide = $(‘#btnHide‘);

this.regEvent();
},
regEvent: function(){
var _this = this;

this.ui.btnShow.click(function(){
_this.show();
});

this.ui.btnHide.click(function(){
_this.hide();
});
},
show: function(){
this.ui.msg.show();
},
hide: function(){
this.ui.msg.hide();
}
};

$(function(){
MV.init();
});

当然如果简单的需求这样写完全没有问题, 但是往往现实中的需求要远比这个例子复杂的多, 下面看看用mvvm是怎么做的


<div class="container">
<h1>mvvm示例</h1>
<div id="msg" class="row">hello world!</div>
<div class="row">
<input id="btnShow" type="button" value="显示" />
<input id="btnHide" type="button" value="隐藏" />
</div>
<div id="backboneMsg" class="row">hello backbone!</div>
<div class="row">
<input id="btnOpen" type="button" value="打开" />
<input id="btnClose" type="button" value="关闭" />
</div>
</div>


    var ui = {};
ui.msg = $(‘#backboneMsg‘);
ui.btnOpen = $(‘#btnOpen‘);
ui.btnClose = $(‘#btnClose‘);

var Model = Backbone.Model.extend({
status: true,
initialize: function(){
this.initEvents();
},
initEvents: function(){
var _this = this;
this.bind(‘change‘, function(){
if(this.hasChanged(‘status‘)){
if(_this.get(‘status‘)){
_this.show();
}else{
_this.hide();
}
}
});
},
show: function(){
ui.msg.show();
},
hide: function(){
ui.msg.hide();
}
});

var model = new Model();
ui.btnOpen.click(function(){
model.set({status: true});
});
  
ui.btnClose.click(function(){
model.set({status: false});
});

从上面的代码我们可以看到, 按钮事件我们并没有直接去更改ui, 只是更改了model的数据, model监听了change事件,当有数据发生改变时,
会根据数据的值进行一些业务上的操作, 我们可以看到, 在这种情况完全可以让ui和数据分离(数据和ui解耦), 使你的代码业务, 逻辑更清晰, 更容易维护,
当然这只是个简单的例子, 后续会整理些比较复杂的例子,让大家能更清晰的看到mvvm的优点.

当真正理解了mvvm的核心思想,你会发觉写代码是件多么爽的事情, 文采不是很好, 写的有点乱, 下面奉上全部代码.


<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>mvvm</title>
<script type="text/javascript" src="../backnone/jquery.js"></script>
<script type="text/javascript" src="../backnone/underscore.js"></script>
<script type="text/javascript" src="../backnone/backbone-min.js"></script>
<style type="text/css">
body{padding: 0px; margin: 0px;}
.container{width:960px; margin: 0 auto; padding: 10px 0px;}
.row{padding: 10px;}
</style>
</head>
<body>
<div class="container">
<h1>mvvm示例</h1>
<div id="msg" class="row">hello world!</div>
<div class="row">
<input id="btnShow" type="button" value="显示" />
<input id="btnHide" type="button" value="隐藏" />
</div>
<div id="backboneMsg" class="row">hello backbone!</div>
<div class="row">
<input id="btnOpen" type="button" value="打开" />
<input id="btnClose" type="button" value="关闭" />
</div>
</div>
<script type="text/javascript">
var MV = {
init: function(){

this.ui = {};
this.ui.msg = $(‘#msg‘);
this.ui.btnShow = $(‘#btnShow‘);
this.ui.btnHide = $(‘#btnHide‘);

this.regEvent();
},
regEvent: function(){
var _this = this;

this.ui.btnShow.click(function(){
_this.show();
});

this.ui.btnHide.click(function(){
_this.hide();
});
},
show: function(){
this.ui.msg.show();
},
hide: function(){
this.ui.msg.hide();
}
};

$(function(){
MV.init();
});
</script>
<script type="text/javascript">
var ui = {};
ui.msg = $(‘#backboneMsg‘);
ui.btnOpen = $(‘#btnOpen‘);
ui.btnClose = $(‘#btnClose‘);

var Model = Backbone.Model.extend({
status: true,
initialize: function(){
this.initEvents();
},
initEvents: function(){
var _this = this;
this.bind(‘change‘, function(){
if(this.hasChanged(‘status‘)){
if(_this.get(‘status‘)){
_this.show();
}else{
_this.hide();
}
}
});
},
show: function(){
ui.msg.show();
},
hide: function(){
ui.msg.hide();
}
});

var model = new Model();
ui.btnOpen.click(function(){
model.set({status: true});
});

ui.btnClose.click(function(){
model.set({status: false});
});
</script>
</body>
</html>

mvvm到底是个什么玩意,布布扣,bubuko.com

时间: 2024-10-13 06:57:54

mvvm到底是个什么玩意的相关文章

maven(一) maven到底是个啥玩意~

我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人.有福了,看完基本上你就会发现原来这么简单. 参考博文:通俗理解maven 该篇文章篇幅很长,大概的思路如下 maven的介绍,初步认识,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(创建maven项目) --> 用myeclipse创

doctrine2到底是个什么玩意

本文非原创,转载自:http://www.cnblogs.com/yjf512/p/3375614.html 感谢原作者分享! 之前和最近一个项目用到了Doctrine,由于是别人搭建的,自己没有很了解,最近又开始做的时候发现拙荆见肘,于是看了一下doctrine教程,本文就是加上自己理解的doctrine教程文档笔记了. Doctrine2 配置需求 需要php5.3.3及以上 可以使用composer安装 什么是Doctrine? Doctrine是一个ORM(Object-relation

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

iOS MVVM+RAC

〇.更新 针对最后一小节中干掉基类的做法(Runtime + category),已经有所实现,并按照自己的思路新写了个列表实现,具体可查看对于iOS架构模式之争的一些思考. 一.前言 很早之前就想写写自己在架构模式方面的心得,但是一直感觉自己是井底之蛙,毕竟在iOS领域越深入越感到自己的无知,心中有着敬畏之心,就更没有自信去写这个东西(你也可以理解是没时间(>﹏<),请原谅我的装逼,嘿嘿). 对于架构模式这个让人又爱又恨的玩意,说来其实简单,但一千个人眼中就有一千种哈姆雷特,说他千变万化确实

MVVM 介绍

我会修改一个关键架构,并将其带入我从那时起就在开发的各种应用,即使用一种叫做 Model-View-ViewModel 的架构替换 Model-View-Controller. 所以,MVVM 到底是什么?与其专注于说明 MVVM 的来历,不如让我们看一个典型的 iOS 是如何构建的,并从那里了解 MVVM: 我们看到的是一个典型的 MVC 设置.Model 呈现数据,View 呈现用户界面,而 View Controller 调节它两者之间的交互.Cool! 稍微考虑一下,虽然 View 和

对于 MVVM 我想说:自已的事情自已做,控制器就简化了!

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 先来几个彩蛋: http://numbbbbb.gitbooks.io/-the-swift-programming-language-/ htt

MVVM 模式下iOS项目目录结构详细说明

?更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么?下面,我们将结合代码,说明 MVVM 设计模式以及项目目录结构. 一.MVVM 模式介绍  MVVM 是 Model-View-View Model 的缩写,MVVM 听起来好像很复杂的样子,但它本质上就是MVC 的改进版.MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和

Web Services到底是什么

最近刚刚接触到Onvif协议,其规范中设备管理和控制部分所定义的接口均以Web Services的形式提供.那这个Web Services到底是个什么玩意啊? 经过一番周折,搜集到了不少形象易懂的解释和大家分享下: 1 楼: 比如说很多软件都有天气预报的功能,比如 qq 主面板上就有显示天气的信息 但是这些信息可能是从气象局得到的,怎么得到的呢?就是用 web service 比如,这里有个天气预报的 web service ,地址是 http://www.webservicex.net/glo

MVVM 简介

转:https://objccn.io/issue-13-1/ 所以,MVVM 到底是什么?与其专注于说明 MVVM 的来历,不如让我们看一个典型的 iOS 是如何构建的,并从那里了解 MVVM: 我们看到的是一个典型的 MVC 设置.Model 呈现数据,View 呈现用户界面,而 View Controller 调节它两者之间的交互.Cool! 稍微考虑一下,虽然 View 和 View Controller 是技术上不同的组件,但它们几乎总是手牵手在一起,成对的.你什么时候看到一个 Vie