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也不用管他们里面的内容