表现与数据分离;前台MVC

无意间看到一个web前端招聘要求:表现与数据分离

这名词对我非常陌生,我就去百度了下

由于有各种莫名其妙的需求,所以才会出现我们前端MVC这样的莫名其妙的东西。。。

我们的html就是model,我们的css就是view。我们的js就是controller。

话不多说,先上一段代码(原来的代码,抄过来的):

复制代码
 2 <head>
 3     <title></title>
 4     <script src="../jquery-1.7.1.js" type="text/javascript"></script>
 5     <script type="text/javascript">
 6         $(document).ready(function () {
 7             var end = $('#end');
 8             $('#pili').change(function () {
 9                 var name = '';
10                 var p = $(this).val();
11                 if (p == '叶小钗') {
12                     name = '刀狂剑痴';
13                 }
14                 if (p == '一页书') {
15                     name = '百世经纶';
16                 }
17                 if (p == '素还真') {
18                     name = '清香白莲';
19                 }
20 
21                 end.html(name + p);
22             });
23         });
24     </script>
25 </head>
26 <body>
27     <select id="pili">
28         <option value="叶小钗">叶小钗</option>
29         <option value="一页书">一页书</option>
30         <option value="素还真">素还真</option>
31     </select>
32     <div id="end"></div>
33 </body>
34 </html>
复制代码

我们又一次看看上面的代码。非常easy的逻辑。select改变后变化end的值,好了如今需求发生改变:

① select变成使用input模拟select

② 在手机上还是使用select算了

③ 总会有莫名其妙的需求,这个就是

好吧。如今的代码你该怎么写呢?是不是会写几个代码,或者你压根不知道怎么写呢???于是看看我们的MVC的实现吧

PS:代码是我可耻的抄的。。。。但我但是自豪的一个字一个字的敲的哦,窃知识不算偷......

复制代码
 2 <head>
 3     <title></title>
 4     <script src="../jquery-1.7.1.js" type="text/javascript"></script>
 5     <script type="text/javascript">
 6         $(document).ready(function () {
 7             //定义一个controller
 8             var piliController = {
 9                 //选择视图
10                 start: function () {
11                     this.view.start();
12                 },
13                 //将用户操作映射到模型更新上
14                 set: function (name) {
15                     this.model.setPerson(name);
16                 }
17             };
18             piliController.model = {
19                 piliKV: {
20                     '叶小钗': '刀狂剑痴',
21                     '一页书': '百世经纶',
22                     '素还真': '清香白莲'
23                 },
24                 curPerson: null,
25                 //数据模型负责业务逻辑和数据存储
26                 setPerson: function (name) {
27                     this.curPerson = this.piliKV[name] ?

name : null; 28 this.onchange(); 29 }, 30 //通知数据同步更新 31 onchange: function () { 32 piliController.view.update(); 33 }, 34 //对应视图对当前状态的查询 35 getPiliAction: function () { 36 return this.curPerson ? this.piliKV[this.curPerson] + this.curPerson : '???'; 37 } 38 }; 39 piliController.view = { 40 //用户触发change事件 41 start: function () { 42 $('#pili').change(this.onchange); 43 }, 44 onchange: function () { 45 piliController.set($('#pili').val()); 46 }, 47 update: function () { 48 $('#end').html(piliController.model.getPiliAction()); 49 } 50 }; 51 piliController.start(); 52 }); 53 </script> 54 </head> 55 <body> 56 <select id="pili"> 57 <option value="叶小钗">叶小钗</option> 58 <option value="一页书">一页书</option> 59 <option value="素还真">素还真</option> 60 </select> 61 <div id="end"></div> 62 </body> 63 </html>
复制代码

我们来看看这个神一样的代码。。。。我们一開始会觉得他有这些问题:

① 代码维护困难。至少我觉得非常困难

② 徒增复杂性。性能会有问题

③ 我并不能说服自己说自己懂了。

。。。

于是我们就放弃了MVC啦,可是我们回过头来好好审视下他,我们会发现不一样的东西:

① 我们好像就在view中使用了选择器获取dom,其他地方压根不认识dom这个丫的。

② 我们的数据似乎在model中,我们能够任意改变。可是并不会影响到我们dom

③ view和model是全然独立的。我们的controller恰好把他们串联起来了

看着这奇妙的魔法,我似懂非懂的点了点头。你妹的MVC还真他妈够劲!



转载于:https://www.cnblogs.com/lxjshuju/p/6953290.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用EFI引导从硬盘(U盘)安装Win7的图文教程

眼下仅支持vista后的64位系统大部分使用EFI引导安装Win7的教程都是採用光盘启动安装&#xff0c;尽管光盘安装比較简单&#xff0c;可是对于没有光驱的朋友来说还是相当不便&#xff0c;更不用说光盘安装的两大缺点了&#xff0c;一速度慢&#xff0c;二不灵活。因此本篇教程将…

计算机语言中str是什么意思,vb中str什么意思

vb中str什么意思&#xff1f;str是VB的一种函数&#xff0c;可以将数字型变量或常量转换成字符型变量或常量。str函数的功能是返回代表一数值的Variant (String)。当一数字转成字符串时&#xff0c;总会在前头保留一空位来表示正负。如果 number 为正&#xff0c;返回的字符串包…

计算机中函数counta表示,excel中counta函数的使用方法

你还在为Excel中counta函数的使用方法而苦恼吗&#xff0c;今天小编教你Excel中counta函数的使用方法&#xff0c;今天&#xff0c;学习啦小编就教大家在counta函数的使用方法。Excel的counta函数的使用方法如下&#xff1a;主要从四方面对Excel函数进行讲解&#xff0c;1.函数…

天正计算机命令大全,天正CAD 中按Ctrl+v在不同图中粘贴出现“未知命令T81_tpasteclip”,直接在CAD中就能操作...

天正CAD 中按Ctrlv在不同图中粘贴出现“未知命令T81_tpasteclip”&#xff0c;直接在CAD中就能操作以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;天正CAD 中按Ctrlv在不同图中粘贴出现“未…

挺好用的Markdown写法

最近喜欢用有道云写东西&#xff0c;挺爽的&#xff0c;同时也支持markdown写法&#xff0c;大家可以去试试 最近markdown很火&#xff0c;因为写文档之类很简洁很漂亮好排版&#xff0c;可以了解一下 例如github上就用这个&#xff0c; 例如这个就是用markdown写出来的介绍&am…

ffmpeg在android上输出滑屏问题处理

ffmpeg部分机器上有花屏的问题 原代码例如以下: while(av_read_frame(formatCtx, &packet)>0 && !_stop && NULL!window && bInit) {// Is this a packet from the video stream?if(packet.stream_indexvideoStream) {// Decode video frameav…

ff14拆区后哪个服务器人最多,FF14拆区可以转服吗 拆区期间转服教程

FF14拆区可以转服吗?随着FF14拆区改动的来临&#xff0c;很多玩家开始迷惘&#xff0c;毕竟自从开了跨服以后&#xff0c;跟同区不同服的亲友一起游戏的机会大大增加了。现在随着拆区改动&#xff0c;不少玩家还不知道能不能继续跟亲友玩耍&#xff0c;想知道拆区可以转服吗&a…

索引快速查询

一、索引 索引是表的目录&#xff0c;在查找内容之前可以先在目录中查找索引位置&#xff0c;以此快速定位查询数据。对于索引&#xff0c;会保存在额外的文件中。 名词&#xff1a; 覆盖索引&#xff1a; - 在索引文件中直接获取数据 索引合并&#xff1a; …

服务器红帽操作系统安装,怎么安装red hat操作系统

红帽在2014年6月发布了最新旗舰版企业操作系统——红帽企业Linux 7。基于红帽企业Linux 7操作系统&#xff0c;企业可整合裸机服务器、 虚拟机、基础设施即服务(IaaS)和平台即服务(PaaS)&#xff0c;以构建一个强大稳健的数据中心环境&#xff0c;满足不断变化的业务需求。学习…

Java中Arraylist源码分析

前言&#xff1a;ArrayList作为我们常用的一个集合数据类型&#xff0c;我们在代码中经常用它来装载数据&#xff0c;可谓是和HashMap一样常用的集合类型了。我们经常用它&#xff0c;那么就有必须知道它的内部工作原理&#xff0c;比如它是如何添加进去数据的&#xff0c;它内…

联想服务器系统安装bios设置,Windows 8操作系统如何通过Legacy BIOS与UEFI两种模式安装...

Win8系统相对于Win7系统在开机速度上有相当大的提升&#xff0c;这是因为Win8系统为了提升系统性能和对硬件的优化&#xff0c;加入了诸如开机引导及应用预缓存等技术。而其中的UEFI BIOS引导&#xff0c;则能使平台开机更智能&#xff0c;开机速度更快。对比采用传统BIOS引导启…

系统云服务器,系统云服务器

系统云服务器 内容精选换一换当云服务器密码即将过期、密码泄露或首次登录时(首次登录云服务器建议您修改初始密码)&#xff0c;您可以参考本节操作在操作系统内部修改云服务器密码。优先推荐您参考在控制台重置云服务器密码&#xff0c;在控制台重置实例的登录密码。可以登录云…

如何在Global.asax中判断是否是ajax请求

今天在一个应用场景中需要在Global.asax中判断一个请求是否是ajax请求&#xff0c;而在ASP.NET MVC中已经提供了一个现成的扩展方法IsAjaxRequest&#xff1a; namespace System.Web.Mvc {public static class AjaxRequestExtensions{public static bool IsAjaxRequest(this Ht…

csp真题 202109-2非零段划分C++代码(100分)

试题编号&#xff1a; 202109-2 试题名称&#xff1a; 非零段划分 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 样例1输入 11 3 1 2 0 0 2 0 4 5 0 2样例1输出 5样例1解释 p2时&#xff0c;A[3,0,2,0,0,2,0,4,5,0,2]&#xff0c;5个非零段依次为[3]、[2]、[2…

c++中四舍五入取整、向上取整和向下取整问题

方法一&#xff1a;利用c函数 四舍五入&#xff1a;round()函数 向上取整&#xff1a;ceil()函数 向下取整&#xff1a;floor()函数 #include <iostream> #include <cmath>//函数头文件 using namespace std; int main() {double a1.2;double b3.7;cout<<&q…

SQL PROMPT5.3.4.1的一些设置选项

摘自&#xff1a;http://www.cnblogs.com/furenjian/p/4519426.html sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章&#xff1a;例如SQLSERVER开发利器XXXXXX http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html http://www.…

csp真题202112-1 序列查询 (100分)

#include <iostream> using namespace std; int A[1000000]{0};//c中一定一定要要记得给变量赋初始值&#xff0c;会减少很多不必要的麻烦 //尽可能将数组量大的数组定义在函数外面&#xff0c;不要在函数内部定义大数组 int main() {int n0,N0,sum0,i0;cin>>n&g…

云麦小米华为体脂秤怎么样_测评华为智能体脂秤,比小米智能体重秤贵30元到底差别在哪里?...

“流浪的好奇”每天更新最新科技资讯和产品测评内容&#xff0c;欢迎您关注订阅&#xff01;我们之前说过华为可不仅仅只有5G通讯技术和智能手机&#xff0c;华为杂货铺里的产品虽然不如小米杂货铺那么的丰富&#xff0c;但是也不是空铺一个&#xff0c;还是有一些华为主业之外…

c++中引用和指针的区别

指针是指向一块内存&#xff0c;它的内容是所指内存的地址&#xff1b; 而引用则是指向某块内存变量的一个别名&#xff0c;相当于变量的另一个名字。 例如&#xff1a; #include <stdio.h> int main() {int a2;int &ba;printf("a:%d\n",a);printf("…

什么是大数据,怎么理解和应对大数据时代

什么是大数据&#xff0c;怎么理解和应对大数据时代 在大数据与深度学习中蝶化的人工智能。当代人工智能离不开大数据和深度学习算法。我们先来了解什么是大数据&#xff0c;大数据的本质是什么&#xff0c;在大数据时代我们应该如何应对&#xff1f; 当我们谈论数据的时候我们…