前端 MVC 与模块化

2018-08-14  本文已影响61人  千反田爱瑠爱好者

模块化

将页面中各部分执行逻辑抽取出来单独写在一个js文件模块。

模块调用

!function() {

    // 1、把变量设置在window
    var name = window.name = 'ywh'      

    // 2、把闭包函数设置在window(隐藏细节,使person不可以直接访问)
    var person = {
        name: 'ywh',
        age: 18
    }
    window.ywhGroupUp = function() {    
        person.age += 1
        return person.age
    }
}.call()

MVC

MVC
MVC

View:在js模块中获取页面元素(如最外层div)命名为view,封装render方法

var view = document.querySelector('#topNavBar')
// ...

Controller:把对模块中元素的操作函数封装在controller对象中。

var controller = {
    view: null,
    init: function(view) {          // 初始化
        this.view = view
        this.bindEvents()
        // 其他初始化操作
    }
    bindEvents: function() {        // 绑定事件
        let logo = view.querySelector('.logo')
        window.addEventListener('scroll', function(x){
            if (window.scrolly > 0) {
                this.active()
            }
            else {
                this.deactive()
            }
            this.view.classList.add('test')
        }.bind(this))   // 绑定this为外部(即controller)的this
        // 也可以改为箭头函数,箭头函数中的this即为外部的this
    },
    active: function() {            // 激活
        this.view.classList.add('test')
    }
    deactive: function() {          // 不激活
        this.view.classList.remove('test')
    }
}
controller.init(view)

Model:抽取Controller中涉及CRUD的函数放在model。

最后封装到立即执行函数中构成一个模块:

!function(){
    var model = // ...
    var view = // ...
    var controller = // ...
    controller.init(view)
}.call()
上一篇 下一篇

猜你喜欢

热点阅读