1.MVC的基础理念
MVC是一种设计模式的理念,意在对代码结构进行优化,减少重复代码,防止写出面条式代码。
MVC大体分为三个部分:
M-Model(数据类型)
负责操作所有数据,需要把所有操作数据的代码都归类在Model下面:Model = {<br /> date:{需要用到的数据},<br /> create():{增加数据},<br /> delete():{删除数据},<br /> update():{更新数据},<br /> get():{获取数据}<br />}
V-View(视图)
负责所有UI界面:View = {<br /> el:null,//视图容器<br /> html:`......`//视图模板<br /> init(){初始化视图},<br /> render(){渲染页面}<br /> }
C-Controller(控制器)
负责其他所有内容:(下面主要是用户操作的控制和页面渲染的控制)Controller = {<br /> init(){<br /> v.init() //View初始化<br /> v.render() //渲染页面<br /> c.autoBindEvents() //绑定自动事件<br /> eventBus.on('m:update',()=>{v.render()})//当eventBus触发时就重新渲染页面<br /> },<br /> events:{以哈希表形式存储事件},<br /> method(){<br /> date = 操作改变之后的新数据<br /> m.update(date) <br /> },<br /> autoBindEvents(){自动绑定功能}<br /> }
2.EventBus
EventBus被称为事件总线,主要用于组件之间的监听和通信。
比方说M数据类型里面的内容更新了,只需要使用tigger()方法在更新时输出一个信号,C里面的on()方法就可以收到这个信号,对视图进行渲染或操作。const eventBus = **_$_**(**_window_**)
//引入EventBuseventBus.trigger('m:updated')
//触发tigger时发出信号m:updatedeventBus.on('m:update',()=>{v.render(m.date.n)})
//on事件监听到m:updated之后就会获取到更新之后
的数据重新渲染页面
3.表驱动编程
表驱动编程就是就是把关键信息整理为一个表,而不是使用逻辑语句,逻辑语句在逻辑简单时会写的比较简单易懂,但是当逻辑复杂时,就会显得非常臃肿,会有大量重复代码
如下列代码中,代码重复度较高bindEvents(){<br /> v.el.on('click','#add1',()=>{<br /> m.date.n += 1<br /> v.render(m.date.n)<br /> })<br /> v.el.on('click','#add1',()=>{<br /> m.date.n -= 1<br /> v.render(m.date.n)<br /> })<br /> v.el.on('click','#add1',()=>{<br /> m.date.n *= 1<br /> v.render(m.date.n)<br /> })<br /> v.el.on('click','#add1',()=>{<br /> m.date.n /= 1<br /> v.render(m.date.n)<br /> })<br />}
只需要把关键的内容提取出来,做成一个哈希表,就可以让数据和逻辑更清晰,且不显得臃肿events:{<br /> 'click #add1' : 'add',<br /> 'click #minus1' : 'minus',<br /> 'click #mul2' : 'mul',<br /> 'click #divide2' : 'div'<br />},<br />add(){<br /> m.update(date:(n:m.date.n +1))<br />},<br />minus(){<br /> m.update(date:(n:m.date.n -1))<br />},<br />mul(){<br /> m.update(date:(n:m.date.n *2))<br />},<br />div(){<br /> m.update(date:(n:m.date.n /2))<br />}
4.模块化
模块化就是把所有所有内容分为不同的块,各自只需要负责处理自身模块的代码就行了,主体只需要引入对应模块的JS文件。
模块化的好处有很多,首先因为分为不同的块,所以相互之间是独立的,不用担心影响到其他模块,就算是不同模块使用不同技术也是可以的。而且这样文件就比较简洁,修改时只需要在目录里面找到对应模块的文件进去修改就行了,既整洁又方便,所有代码都应该进行模块化处理。