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. linux学习笔记之硬盘分区

    引用:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/03/2997098.html PS:本文仅对知识点作总结.详情请参考原文. 首先 ...

  2. google visit

    http://emuch.net/bbs/viewthread.php?tid=7630684&fpage=3&target=blank 内Facebook,twitter,dropb ...

  3. HTML5 canvas 在线画笔绘图工具(四)

    HTML5画图命令 图形的绘制是由TDrawHandler与TCommand 协同工作完成. TDrawHandler需要完成以下工作 1.聚集类用于管理绘图的命令 TCommand 2.管理鼠标事件 ...

  4. Git commit template 模板设定

    多人协作开发一个项目时,版本控制工具是少不了的,git是linux 内核开发时引入的一个优秀代码管理工具,利用它能很好使团队协作完成一个项目.为了规范团队的代码提交,也方便出版本时的release n ...

  5. SQL Server 的各种查询和要申请的锁

    前期准备: 1.建表 create table T_Btree(X int primary key,Y nvarchar(4000));            create table T_Heap( ...

  6. opencv菜鸟学习之旅cvNorm

    Norm 计算数组的绝对范数, 绝对差分范数或者相对差分范数 double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_ty ...

  7. yum lamp for Centos6.4

    1,Centos6.4  yum lamp#!/bin/sh<<cat#echo Ruiy!#Create by Ruiy on 2015-03-27----cat yum install ...

  8. Android学习总结——获取被启动的Activity传回的数据

    当前Activity:包含一个Button和一个TextView,用于启动另一个Activity和显示传回的数据,这里重写了onActivityResult()方法. public class Mai ...

  9. JavaScript跨域深入研究与解决办法(转)

    什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...

  10. Fiddler使用教程(收藏)

    Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...