博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC in Javascript
阅读量:4313 次
发布时间:2019-06-06

本文共 2480 字,大约阅读时间需要 8 分钟。

MVC in Javascript

From

原博的比我详细 我是以自己的惯用的方式实现了一下

MVC就是各尽自己的职责,整个视图都是按照数据来渲染的, 视图本身并不保存数据。 发生的事件由Controller控制, Controller也是修改Model中的数据, 之后调用View中的refreshDOM刷新DOM

var doc = document;  var PubSub = function(){    this.event = [];  }  PubSub.prototype = {    registerEvent: function(fn){      this.event.push(fn);    },    triggerEvent: function(){      this.event.forEach(function(fn){        fn.call(this);      }.bind(this));    }  }    var Model = function(list){      this.list = list;      this.addEvent = new PubSub();      this.delEvent = new PubSub();    }    Model.prototype = {      addItem: function(item){        if(item){          this.list.push(item);        }else{          var lastData = self.model.list[self.model.list.length-1];          var num = +lastData.match(/item(\d)/)[1];          this.list.push('item'+(num+1));        }      },      removeItem: function(index){        this.list.splice(index,1);      }    }    var View = function(model,container){      var self = this;      this.model = model;      this.container = container;      this.model.addEvent.registerEvent(function(){        self.model.addItem();        self.refreshDOM();      });      this.model.delEvent.registerEvent(function(){        if(self.container.selectedIndex != -1){          self.model.removeItem(self.container.selectedIndex);          self.refreshDOM();        }      });      this.refreshDOM = function(){        var listData = this.model.list;        var selectElem = doc.querySelector('#list');        selectElem.innerHTML = '';        listData.forEach(function(item){          var option = doc.createElement('option');          option.value = item;          option.innerHTML = item;          self.container.appendChild(option);        });      }    }    var Controller = function(elements, model){      var self = this;      this.addButton = elements.addButton;      this.delButton = elements.delButton;      this.model = model;      this.addButton.addEventListener('click', function(){        self.model.addEvent.triggerEvent();      });      this.delButton.addEventListener('click', function(){        self.model.delEvent.triggerEvent();      })    }    var model = new Model(['item1','item2']);    var view = new View(model, doc.querySelector('#list'));    view.refreshDOM();    var controller = new Controller({      addButton: doc.querySelector('#addBtn'),      delButton: doc.querySelector('#delBtn')    },model)

转载于:https://www.cnblogs.com/cart55free99/p/5180775.html

你可能感兴趣的文章
python 文件操作的函数
查看>>
【2017下集美大学软工1412班_助教博客】团队作业3——需求改进&系统设计团队成绩公示...
查看>>
Educational Codeforces Round 26 E - Vasya's Function
查看>>
【Java基础】一个有意思的泛型方法Arrays.asList(T... a)
查看>>
Windows Internals 笔记——内核对象
查看>>
矩阵乘法、快速幂
查看>>
一周学会Mootools 1.4中文教程:(6)动画
查看>>
优秀的第二外语学习网站:Lang-8
查看>>
oracle存储过程杂记
查看>>
JPA @Id 和 @GeneratedValue 注解详解
查看>>
自定义Template
查看>>
su 和 su -
查看>>
MapReduce:共同好友详解
查看>>
python函数:匿名函数、函数递归与二分法、面向过程编程
查看>>
final、static、代码块、静态代码块、内部类、代码执行顺序
查看>>
LeetCode-Burst Balloons
查看>>
LeetCode-Bitwise AND of Numbers Range
查看>>
Windows Server 2012和2008中使用计划任务定时执行BAT批处理文件 定时备份mysql数据...
查看>>
费马小定理与GCD&LCM
查看>>
P1077 摆花
查看>>