表现与数据分离;前台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还真他妈够劲!
!
表现与数据分离;前台MVC的更多相关文章
- mvc中的表现和数据分离怎么理解?
使用过 JavaScript框架(如 AngularJS, Backbone)的人都很熟悉在UI(用户界面,前端)中mvc的工作机理.这些框架实现了MVC,使得在一个单页面中实现根据需要变化视图时更加 ...
- 【web前端面试题整理07】我不理解表现与数据分离。。。
拜师传说 今天老夫拜师了,老夫有幸认识一个JS高手,在此推荐其博客,悄悄告诉你,我拜他为师了,他承诺我只收我一个男弟子..... 师尊刚注册的账号,现在博客数量还不多,但是后面点会有干货哦,值得期待. ...
- 使用JavaScript实现表现和数据分离
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8&quo ...
- Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...
- MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合 1.基本数据类型 我们常见有传递 int, string, bool, double, decimal 等类型. 需要注意的是前台传递的参 ...
- 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)
最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...
- 表现层及ASP.NET MVC介绍(二)
表现层及ASP.NET MVC介绍(二) 最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和 ...
- WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对
WPF MVVM UI分离之<交互与数据分离> 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...
- 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...
随机推荐
- 使用less时的calc()函数问题
在使用less时写 width:calc(100%-30px); 但在浏览器检查元素的时候总会显示width:70%; 可以在Less中把calc的写法改写成下面这样: width : calc(~& ...
- Android icon尺寸
Android icon尺寸 密度范围 切图比例(以mdpi为基准) 切图比例(以xxxhdpi为基准) 图标尺寸 外间距 ((图标尺寸-图片尺寸)/2) mdpi 120dpi~160dpi 1 ...
- cordova科大讯飞语音识别
cordova-plugin-IFlyspeech 科大讯飞的语音听说读写的cordova插件 Supported Platforms iOS android Installation 插件安装命令: ...
- iis设置404错误页,返回500状态码
一般在II6下,设置自定义404错误页时,只需要在错误页中选择自定义的页面,做自己的404页面即可.但是在IIS7.0及以上时,设置完404错误页后,会发现状态码返回的是500,并且可能会引起页面乱码 ...
- VC++ 遍历文件夹
}; strcpy_s(szFind, MAX_PATH, m_szDir); strcat_s(szFind, "\\*.*"); WIN32_FIND_DATA wfd; HA ...
- MaskRCNN路标:TensorFlow版本用于抠图
MaskRCNN用于检测路标,作为更详细的目标检测,用以得到更精准的额路标位置,路标的几何中心点,用于构建更为精准的拓扑地图,减少构图误差. 抠图工具已经完成,把框抠出来,用0值表示背景. pytho ...
- nc的简单使用
1.传输文件: 目的主机监听 nc -l 监听端口<未使用端口> > 要接收的文件名 nc -l 6666 > filename.tar 源主机发起请求 nc 目的主机ip ...
- element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数
日期的筛选经常会有最小的日期选择,例如:当前日期 :clearable="false" :picker-options="pickerOptions0" val ...
- altera quartus 百度云分享 quartus prime 17.1 16.1 13.0
quartus prime 17.1 标准版 链接:https://pan.baidu.com/s/10QWejKdDobVxDSqnVPJ0xQ 提取码:hhvj 复制这段内容后打开百度网盘手机Ap ...
- resize监听div的size变化
具体实现分两类, ie9-10 默认支持div的resize事件,可以直接通过div.attachEvent('onresize', handler);的方式实现 其它浏览器 通过在div中添加一个内 ...