MVC 是一种设计模式,将代码分成三个部分来编写展示:Model(模型)、View(视图)、Controller(控制器)。
其中 Model 部分分配以数据或某种功能等;
而 View 部分则负责页面的视图部分的存储;
最后 Controller 部分放置其他诸如请求等内容。
最初的代码中会将 HTML视图部分和数据处理等代码混合在一起,而 MVC 的理念便是将这些代码按照实现不同的需求分成三个模块,各自负责不同的领域,让代码的可读性、维护性变得更加方便。
虽然说将代码构造成 MVC 这样的形式在一开始需要一些额外的工作来完成,但是对于比较复杂的项目来说,将其写成 MVC 的形式会大大减少重复代码的出现,也使得可测试性变得更好。
一个小小的例子
const m = {data: {index: parseInt(localStorage.getItem(localKey)) || 0},create() {},delete() {},update(data) {Object.assign(m.data, data) //把 data 的属性一个个赋值给 m.dataeventBus.trigger('m:updated') //监听的事件中不可有空格localStorage.setItem('index', m.data.index)},get() {}}const v = {el: null,html: (index) => {return `<div><ol class="tab-bar"><li class="${index === 0 ? 'selected' : ''}" data-index = "0"><span>壹</span></li><li class="${index === 1 ? 'selected' : ''}" data-index = "1"><span>贰</span></li></ol><ol class="tab-content"><li class="${index === 0 ? 'active' : ''}">内容1</li><li class="${index === 1 ? 'active' : ''}">内容2</li></ol></div>`},init(container) {v.el = $(container)},render(index) {if (v.el.children.length !== 0) {v.el.empty()}$(v.html(index)).appendTo(v.el)}}const c = {init(container) {v.init(container)v.render(m.data.index) // view = render(data)c.autoBindEvents()eventBus.on('m:updated', () => {v.render(m.data.index)})},events: {'click .tab-bar li': 'x'},x(e) {const index =parseInt(e.currentTarget.dataset.index)m.update({index: index})},autoBindEvents(){for(let key in c.events){const value = c[c.events[key]]const spaceIndex = key.indexOf(' ')const part1 = key.slice(0,spaceIndex)const part2 = key.slice(spaceIndex+1)v.el.on(part1,part2,value)}}}
监听事件
利用 jQuery 创建一个名为 eventBus 的空对象
const eventBus = $({})
此时对象的原型上面会有这么几个属性:on、trigger、off,可以利用这几个属性来实现对事件之间通信
//eventBus.trigger 可以用来触发事件const m = {data: {index: parseInt(localStorage.getItem(localKey)) || 0},update(data) {Object.assign(m.data, data)eventBus.trigger('m:updated') // data 发生改变,触发事件 “m:updated”localStorage.setItem('index', m.data.index)},}//eventBus.on 用来监听事件// 监听这个事件,触发后执行后面的函数eventBus.on('m:updated', () => {v.render(m.data.index)})//eventBus.off 用来取消事件监听eventBus.off("m:updated")
表驱动编程
表驱动编程即为:在表格中查找信息,以取代用较多的 if…else 逻辑判断语句找出值。这种方法在数值较多时,对比逻辑判断语句有着很大的优势,大大减少代码的数量和复杂程度。
模块化这一概念在 MVC 当中可谓贯穿始终。将重复的代码抽成一个函数模块,待使用时进行调用;将代码按照 Model、View、Controller 分为三个模块,再模块之间相互引用进行串联;将每个功能模块的代码分开来编写,最后再进行引用,这样使得代码独立性提高,也有利于之后的升级和维护。
