前端web开发的MVC模式-从一个简单的实例讲起

来源:互联网 发布:游戏王 游戏 知乎 编辑:程序博客网 时间:2024/06/06 05:51

原文链接:http://blog.csdn.net/guoyankun/article/details/19335065


前端web开发的MVC模式 - 从一个简单实例讲起

MVC概论起初来之桌面应用开发。其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序;view为发送给客服端的内容;control为servlet程序控制跳转和工作流。

随着前端Ajax兴起、前端开发工作进一步划分:js程序员和ue页面制作、另外从整个前端项目的清晰明朗以可扩展性角度来看,MVC的应用也越来越必要,特别是对大的项目。

例如 需要给一个页面上的button注册一个onclick事件。

         1、我们可以有如下最简洁的写法:(view和model control完全混合)

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" onclick="alert(this.value);"/>

</BODY>

</HTML>

         说明:如上写法的好处:简单、直接;严重的弊端:如果都是这样写法,页面代码很大的时候,修改js代码还需要查找整个页面,导致整个页面非常混乱。

        

批注:类似与 jsp中直接嵌入java片段语句。

         2、将html和js代码进行适当分离:(view和model control在同一页面适当分离)

         修改以上的写法:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" onclick="tipInfo(this);"/>

<SCRIPT LANGUAGE="JavaScript">

<!--

    function tipInfo(o){

           alert(o.value);

    }

//-->

</SCRIPT>

</BODY>

</HTML>

         这是将页面上所有的js代码操作放到<script></script>标签中进行。使得js逻辑代码相对集中,易于后期修改。

         但是我们还是需要在html标签中写tipInfo(this)的js调用代码。即html和js仍然有混合。

         3、将html和js代码彻底分离:(view和model control完全分离)

         修改写法:

         视图view的html代码:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" id="baidu"/>

</BODY>

<script src="example.js"></script>

</HTML>

         分离出来的模型model和控制control的综合example.js代码:

    var o = document.getElementById("baidu");

    o.onclick = function(){

           alert(this.value);

    }

         说明:button节点的操作和事件注册等工作完全与html页面分离。但是仔细想想,这还不是一个基于MVC的模式,control和model完全混合在一起。

         批注:与jsp中的javabean实现类似。

         4、符合MVC框架的实现:(view、mode和control完全分离)

         View视图的view.html代码:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" id="baidu"/>

</BODY>

    <script src="model.js"></script>

<script src="control.js"></script>

</HTML>

         实现control控制功能的control.js代码:

    function G(id){

           return document.getElementById(id);

    }

    var UI = new Object();

    UI.register = function(id,even,fun,arr){

           if(G(id)) G(id)["on"+even] = function(){ fun(arr);};

    }

    UI.register("baidu","click",tipInfo,[1,2]);

    /*

           第一参数:为button节点id

           第二参数:为需要注册的触发事件

           第三参数:事件触发函数

           第四参数:需要传递的参数。

*/

         说明:control.js的代码就是实现html页面节点事件的注册。使得节点的各种事件知道会触发什么函数去执行。

         具体的函数操作,可以放到model模块中执行,在model中,才是真正处理逻辑操作。看model.js代码:

    function tipInfo(arr){

           alert(arr[1]);

           //实现其他组件功能,例如popup、form等。都属于model模型

    }

         批注:类似jsp中的struts框架、struts标签实现方式。

总结:

         View:只管页面的显示和样式展示

         Control:进行页面节点事件的注册和控制,以及页面加载性能的实现(例如方荣的硬盘缓存)。

         Model:真正的逻辑处理,例如jslib库中的form、popup、drag等功能组件都属于model模块。

一些随想,望大家提建议!


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天钓鲫鱼小杂鱼闹窝怎么办 家里养花生虫子怎么办 生鸡蛋拌饭怎么办 出柜家里人会怎么办 百灵鸟怕人撞笼怎么办 乌鸫雏鸟撞笼返生怎么办 泥石流来了怎么办教案 墙壁插座不通电怎么办 当前目录不能用怎么办 海鲜过敏怎么办没有药 哺乳后胸变小怎么办 有脑出血前兆该怎么办 体检发现甲状腺结节怎么办 月子里宝宝感冒怎么办 10天新生儿感冒怎么办 20天新生儿感冒怎么办 新生儿20天鼻塞怎么办 25天新生儿感冒怎么办 42天新生儿感冒怎么办 上呼吸道感染怎么办比较好 小猫咪太调皮怎么办 水晶彩泥弄到衣服上怎么办 进境动植物检疫许可怎么办 跳舞不会听拍子怎么办 税盘丢了注销公司怎么办 认缴资金不到位怎么办 同一单元有凶宅怎么办 有地皮没房产证怎么办 社保资金被侵吞怎么办? 集体计件手脚慢怎么办 发票当月没用完怎么办 非工业用地怎么办环评 商标注册途中英文错误怎么办 孩子的英文不好怎么办 高盛英文不好怎么办 去美国英文不好怎么办 去越南不会英语怎么办 法斗得了毛囊炎怎么办 头发里有毛囊炎怎么办 笔记本画cad慢怎么办 面试打不出问题怎么办