MVC in Javascript

From

http://www.cnblogs.com/tugenhua0707/p/5156179.html

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

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)

MVC in Javascript的更多相关文章

  1. 试读《基于MVC的JavaScript Web富应用开发》— 不一样的JavaScript

    前言 <基于MVC的JavaScript Web富应用开发>是ItEye在7月份发起试读的书.下载了试读的章节,发现只有全本的开始到第二章,第一章很简洁明了地讲述了JavaScript的历 ...

  2. 《基于MVC的JavaScript Web富应用开发》学习笔记

    第1章 MVC和类 1. 什么是MVC? MVC是一种设计模式, 它将应用划分为3个部分: 数据(模型, Model), 展现层(视图, View) 和用户交互层(控制器, Controller). ...

  3. 再读<<基于MVC的JavaScript Web 富应用开发>>

    工作的时候粗读过这本书的几章内容,真真是囫囵吞枣~~目前手边就剩这一本,重新读才觉得先前是没看明白啊!这个作者博闻强识,对这些插件.库了解的非常多.记录下,查的资料 订阅/发布 jQuery Tiny ...

  4. asp.net mvc页面javascript代码中如何使用razor

    我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...

  5. 试读《基于MVC的JavaScript Web富应用开发》

    前两年做jsp开发时,用了不少JavaScript(JS)和Ajax, 最近的项目一直在使用Flex做前台,虽然也有类似的ActionScript实现JS的功能,但没想到的是,短短几年JS发展如此迅速 ...

  6. ASP.NET MVC 中使用JavaScriptResult asp.net mvc 返回 JavaScript asp.mvc 后台返回js

    return this.Content("<script>alert('暂无!');window.location.href='/Wap/Index';</script&g ...

  7. MVC中JavaScript和CSS的自动打包与压缩

    在程序中安装System.Web.Optimization程序集 依赖关系如下图所示: 添加BundleConfiguration类 代码如下所示 注意必须使用对应的ScriptBundle和Styl ...

  8. Asp.net MVC CSS/Javascript Bundle 配置文件

    Asp.net mvc 中使用 Web Optimization 可以合并.压缩JS和CSS文件,但是每次修改都要改代码 ~/App_Start/BundleConfig.cs ,遂有了将它挪到配置文 ...

  9. [已读]基于MVC的Javascript Web 富应用开发

    这本书是12年出版,我买的时间应该是13年,书架上唯一一本盗版→ → 但是看完是在今年. 因为刚拿到的时候,读起来很是磕磕绊绊,就搁置了蛮久.到第二次拿起来的时候,发现已经有部分内容过时,但我还是觉得 ...

随机推荐

  1. SimpleDateFormat的使用

    SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. 下面是个小 ...

  2. python核心编程-第五章-习题

    1.长整型表示数的范围比整型更大.在python中,整型.长整型趋于统一,普通用户不用特别关注两者区别,仅当需引用C语言时需要特别注意. 2.操作符 (a) def product(x,y): ret ...

  3. C#实现在winfrom程序中下载文件

    //下载文件//downlaodUrl 系统路径如:http://xxx.xxx.xxx/UpFile/kaoqin.doc//fileName 自定义文件名字加后缀(如:考勤.doc)//fileP ...

  4. lastcomm搜索并显示以前执行过的命令信息

    lastcomm搜索并显示以前执行过的命令信息

  5. js调试

    在chrome下的调试案例 1.console.log() $("#typeid").change(function(){ var id = $(this).val(); cons ...

  6. PF_RING packet overwrites

    最近在用 PF_RING 抓包过程中,发现个灵异的现象,高流量丢包时, 经常会出现正在处理的包的内容被覆盖.开始,怀疑是不是自己程序有地方越界写了,后来发现,如果自己拷贝一份,然后处理拷贝的那份,永远 ...

  7. HTML标签实现图片滚动显示

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 栈的C数组实现

    栈是一种先进后出的数据结构.栈的基本操作包括:入栈,出栈,初始化栈,清空栈,遍历栈. C代码如下: #include <stdio.h> #define MaxSize 20 typede ...

  9. OpenStack high-level Functionsenabled

  10. 无限的路_hdu_2073(AC).java

    无限的路 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...