MVC三个对象
M:model,模型
用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,会有一个或多个视图监听此模型。一旦模型的数据发生变化,会通知有关视图。
const m = {data: {//数据n: xxx},create() {},//对数据的操作delete() {},update() {},get() {},};
V:view,视图;
是model在屏幕上的表示,描绘的是model的当前状态。当模型数据生变化时,视图会相应得刷新自己。
const v = {container: xxx,//容器元素template: yyy,//html内容init() {},//初始化render(){} //渲染页面};
C:controller,控制器
定义用户界面对用户输入方式的响应方式,起到不同层面间的组织作用,用于控制应用程序的流程,处理用户的行为与model上数据的改变。
const c = {events: {},//事件列表init(container) {},//初始化x(){},//事件函数y(){},autoBindEvents() {}//绑定鼠标事件},};
eventsBus的API与其作用
可以用jquery获取一个全局对象,当做eventsBus,使用on,trigger,off
同样vue也有eventsBus,$on,$emit,$off
/*trigger($emit)用于触发事件on($on)用于绑定事件off($off)用于解绑事件*/const m = {data:{n:1}update(data){Object.assign(m.data, data);eventsBus.trigger("m-updated");//初始化的时候}}x(){m.updata({n:2})}#app1.on('click','#one',x)eventsBus.on("m-updated", () => {v.render();/*当用户在界面上点击id为one的元素时,最终会冒泡给id为app1的父元素此时会触发调用x函数的事件x函数又会调用update函数update函数会调用 eventsBus.trigger("m-updated")就会激活eventsBus.on("m-updated", () => {v.render();最后调用渲染页面的函数*/
表驱动编程
这是一种编程思想,在原本需要重复多次的面条式代码中抽离出非共性的数据,组成一个哈希表,遍历这个哈希表,将表中的数据添加到原本那些共性的代码中去。极大的提高了代码的可阅读性,也方便未来增删改查数据。
/*这就是用表驱动编程思想调用四个函数了*/const c ={fn1(){...}fn2(){...}fn3(){...}fn3(){...}fn: {'a' : 'fn1','b' : 'fn2','c' : 'fn3','d' : 'fn4'}}for(let key in c.fn){c[c.fn[key]]()}
模块化思想
将网页里的应用划分为各个独立的模块进行开发,模块间不相互影响,既可以使代码结构清晰,便于阅读,还可以使未来便于维护。
如果我需要在页面里添加两个功能,
我会先创建
- index.html
- main.js
- reset.css
- global.css(各功能间的共同样式)
- app1.js(功能一)
- app1.css
- app2.js(功能二)
- app2.css
会做如下操作(export用于导出,import用于导入)
- 在index.html中引入main.js
- 在main.js中引入reset.css,global.css,app1.js和app2.js
- 再在app1.js中引入app1.css,在app2.js中引入app2.css
- 在app1.js里写HTML的内容,插入到index.html的元素中去
- 在app2.js里写HTML的内容,插入到index.html的元素中去
这样就尽可能减少了各部分之间的联系,
如index.html只需要管有没有main.js就行了,不需要在乎里面的内容
main.js导入的app1.js和app2.js也不用管他们里面的内容
