MVC in Javascript
2016-02-03 23:14
585 查看
MVC in Javascript
原博的比我详细 我是以自己的惯用的方式实现了一下
MVC就是各尽自己的职责,整个视图都是按照数据来渲染的, 视图本身并不保存数据。 发生的事件由Controller控制, Controller也是修改Model中的数据, 之后调用View中的refreshDOM刷新DOM
原博的比我详细 我是以自己的惯用的方式实现了一下
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)
相关文章推荐
- WebAPI接收JSON参数注意事项
- Nokitjs 系列-01 - HelloWorld
- JavaScript基础精华01(变量,语法,数据类型)
- JavaScript基础精华01(变量,语法,数据类型)
- DOM的应用
- javascript对this的理解
- JavaScript获取某个月的天数
- JavaScript中sort方法的一个坑(leetcode 179. Largest Number)
- 冒泡,快排算法之javascript初体验
- Javascript自学-1
- DOM基础
- JavaScript属性的可迭代、可修改和可配置特性
- JsonResult类型
- WebPack Loader
- Js判断浏览器是否是移动设备
- js 关闭窗口时判断表单数据是否改变
- JavaScript中变量提升------Hoisting
- C#对实体进行JSON序列化时枚举的处理
- 理解 JavaScript(四)
- 理解 JavaScript(三)