MVP 设计模式
M model层 数据层
P Presenter层 业务逻辑相关的 控制层
V view层 视图层 页面上的dom展示
通过以下 JQuery实现 toDoList
M层很弱 没有通过ajax获取远程数据
div区域 dom域 是 V 层视图
视图改变的时候 触发控制器 控制器可以调M(模型层)发送ajax请求获取数据 控制器也可以根据视图触发的事件操作dom改变视图
P 层是 MVP 设计模式中最核心的一层 是链接M 和 V的中转站
使用MVP 设计模式 控制器大量的逻辑都是在 操作dom
<!DOCTYPE html>
<html>
<head>
<title>JQuery toDoList</title>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<div>
<input type='text' id='input'/>
<button id='btn'>submit</button>
<ul id='list'></ul>
</div>
<script>
function Page(){}
$.extend(Page.prototype,{
init:function() {
this.bindEvents()
},
bindEvents:function() {
var btn = $('#btn') ;
//$.proxy将 handleBtnClick 绑定到当前Page实例
btn.on('click',$.proxy(this.handleBtnClick,this))
},
handleBtnClick:function() {
//alert('123')
var inputElem = $('#input') ;
var inputValue = inputElem.val() ;
var ulElem = $('#list') ;
ulElem.append('<li>'+inputValue+'</li>') ;
inputElem.val('') ;
}
})
var page = new Page() ;
page.init() ;
</script>
</body>
</html>
MVVM设计模式
如下 Vue实现 toDoList
M 模型层 操作数据
V 层 div区域 dom视图
操作 M 层数据 V 层视图同步 改变
VM 层 vue底层 监听到数据变化 重新渲染视图 vue监听到事件被触发 通过VM 调用 M层逻辑 改变M层数据 数据发生变化 VM 自动重新渲染视图
MVVM模式 核心在于 M层开发 MVP模式JQuery面向 dom开发 MVVM模式 Vue面向数据开发
(vue如何知道数据改变了 并且自动渲染视图 ? ES5中 核心API object.defineProperties 同时引入了虚拟dom机制 )
<!DOCTYPE html>
<html>
<head>
<title>ToDoList</title>
<meta charset="UTF-8">
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<input type='text' v-model="inputValue"/>
<button v-on:click="handleBtnClick">submit</button>
<ul>
<li v-for="item in list">{{item}}</li>
</ul>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
list:[] ,
inputValue:'input something...'
},
methods:{
handleBtnClick:function() {
this.list.unshift(this.inputValue)
this.inputValue='input something...'
}
}
})
</script>
</body>
</html>