MVC与Leancloud数据库使用
Unsplash 找图
MVC
M:Model 模块化操作数据
把JS分文件
解决全局变量,用闭包,匿名函数
!function(){}.call();
(function(){}).call();不推荐
使用window.xxx读取函数信息
第一个函数
!function(){
var person = {
name : 'frank',
age : 18
}
window.frankGrowUp = function(){
person.age += 1;
return person.age;
}
}.call();
另外一个函数
!function(){
var frankGrowUp = window.frankGrowUp;
console.log(frankGrowUp);
}.call();
如何使用闭包
- 立即执行函数使得 person 无法被外部访问
- 闭包使得匿名函数可以操作 person
- window.frankGrowUp 保存了匿名函数的地址
- 任何地方都可以使用 window.frankGrowUp
=> 任何地方都可以使用 window.frankGrowUp 操作 person,但是不能直接访问 person
立即执行函数
var accessor = function(){
var person = {
name : 'frank',
age : 18
}
return function(){
person.age += 1;
return person.age;
}
}
var growUp = accessor().call(); //实际是执行 function(){person.age +=1;return person.age};
growUp.call(); //实际是执行 person.age
MVC的V和C
V:View 视图,即用户看得见的.
JS代码加入
var view = docmuent.querySelector('');
C:Controller 控制器
var controller = {
view: null,
init: function(view){
this.view = view;
this.bindEvents();
// this.bindEvents.call(this);
},
bindEvents : function(){
var view = this.view;
//代码
}
}.
contorller.init.(view);
// controller.init.call(controller, view);
对象调用一个函数,那么this就是这个对象
- 可以用bind(this)绑定this;
- 可以用箭头函数,箭头函数没有this,它this就是外面的this;
引入数据库:
- 创建一个应用
- 引入av-min.js 得到window.AV
- 初始化AV对象(代码直接拷)
- 新建一条数据(代码直接拷)
表单提交监听事件
不监听button.click是因为也要监听回车.
但form.addEventListener(‘sumbmit’,()=>{})中的sumbit包含点击事件与回车事件.
let myForm = document.querySelector('#postMessageForm');
myForm.addEventListener('submit',function(e){
e.preventDefault();
let content = myForm.querySelector('input[name=content]').value;
var Message = AV.Object.extend('Message');
var message = new Message();
message.save({
'content' : content
}).then(function(object){
let li = document.createElement('li');
li.innerText = `${object.attributes.name} : ${object.attributes.content}`;
let messageList = document.querySelector('#messageList');
messageList.appendChild(li);
myForm.querySelector('input[name=content]').value = '';
})
})
页面读取数据库信息:
var query = new AV.Query('Message');
query.find()
.then(
function(messages){
let array = messages.map((item)=> item.attributes);
array.forEach((item)=>{
let li = document.createElement('li');
li.innerText = `${item.name} : ${item.content}`;
let messageList = document.querySelector('#messageList');
messageList.appendChild(li);
})
}
)
MVC总结
- Model 操作数据
- View 表示视图
- Controller 是控制器
Model 和服务器交互,Model 将得到的数据交给 Controller,Controller 把数据填入 View,并监听 View
用户操作 View,如点击按钮,Controller 就会接受到点击事件,Controller 这时会去调用 Model,Model 会与服务器交互,得到数据后返回给 Controller,Controller 得到数据就去更新 View
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!