Javascript模板及其中的数据逻辑分离思想(MVC)
#Javascript模板及其中的数据逻辑分离思想 ##需求描述
项目数据库的题目表描述了70-120道题目,并且是会变化的,要根据数据库中的数据描述,比如,选择还是填空题,是不是重点题,题目总分是多少等等有条件地渲染出题目的内容,并且能做完后保存回数据库,打印出来。 ##以前的实现
由后台(structs2+spring+ibaties)查询,扔出JSON ,前台就是无穷无尽的if,switch。一但有要修改,就要吐血了,也不知道要改多少个地方 ##思考与改进
结合自己的[正则表达式](http://www.cnblogs.com/p2227/tag/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/)及[HTML](http://www.cnblogs.com/p2227/tag/html/)知识,我们可以定义一种规则,使得JSON与HTML进行关联,怎么样的JSON就有怎么样变化的HTML,当需求变动-->数据库变动-->生成JSON变动-->生成HTML变动,整个项目就好维护多了。于是这就形成了一套`Javascript模板`。 ##JSON数据解释
```javascript
var subject = {
"subjectAttr": "JD-SUB-3",//JD-SUB-1填空题,JD-SUB-3选择题
"remark": "",//备注
"score": "",//填空题的分数
"subjectContent": "《帱槗嘮煵僝蹣媮》逦瘞僌鰦鵾舷鶴",//题目内容
"selectTypeValue": "***",//题目重要程度,*越多越重要
"pkAnswer": "1",//JD-SUB-3类别题目的答案(单选),1选0未选
"subjectType": "SUB-AVAIL-2",//必填,SUB-AVAIL-1非必填
"pkCase": "",//JD-SUB-8类别题目的答案,结果为UUID
"td4BizAnsweritemList": [{//选择题的选项
"content": "否",//选项的正文
"id": "6BA95898E82B41DF947D14603C4743CF"//选项的CODE
},{ //另外一个选项
}]
```
##示例及代码
根据以上的JSON,我们生成对应的HTML。核心代码思想就是用正则分割数据,利用replace函数去匹配,生成HTML。

我只需要配置JSON内容中的subjectAttr属性,其表现方式就随着我的数据自然而变动,其他的逻辑就不需要再重复了 [DEMO](http://p2227.github.io/demo/jsTemplate/) [CODE](https://github.com/p2227/demo/tree/gh-pages/jsTemplate) ##自我点评
这个模板是针对项目需求及easyui组件去处理的,可能局限性比较大,效率也有问题,但是这套简单的模板提高了代码的重用性,而且使得程序的**数据**与 **控制逻辑**耦合度降低,维护性提高了很多。而这个理论再提升,就是MVC了,前端也有不少优秀的MV*(MVC,MVP,MVVM)框架,先有实践,再结合源代码去学习优秀的框架,是提升自我的常用途径。 简单地描述一下本人的JS模板的数据模型  原理是非常简单的,JSON与HTML两种不同的格式,一个抽象的控制器使得他们之间转化(主要还是JSON2HTML,HTML2JSON有现成的serialize函数)。当我突然之间想进行一些视图上的改动,例如`JD-SUB-3`选择题,不再以单选框显示,而是“是 否”两个单radio,那我只需要改动`jsParser`中的`template`即可,见`JD-SUB-31`与`JD-SUB-3`的区别。如果再有一重if/else或者switch,那么在条件中也会有很多重复的功能,用js模板能把这些功能抽象出来,从而达到**思考与改进**中的目标。
Javascript模板及其中的数据逻辑分离思想(MVC)的更多相关文章
- thymeleaf的内联th:inline(在javascript访问model中的数据)
thymeleaf模板引擎为前端数据的获取提供了较大的便利,在html标签内可通过th标签加${}表达式访问model里的对象数据.但如果不想通过th标签而是简单地访问model对象数据,或是想在ja ...
- 高性能JavaScript模板引擎原理解析
随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC ...
- 高性能JavaScript模板引擎实现原理详解
这篇文章主要介绍了JavaScript模板引擎实现原理详解,本文着重讲解artTemplate模板的实现原理,它采用预编译方式让性能有了质的飞跃,是其它知名模板引擎的25.32 倍,需要的朋友可以参考 ...
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
- 各种JS模板引擎对比数据(高性能JavaScript模板引擎)
最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...
- 在 ASP.NET 中创建数据访问和业务逻辑层(转)
.NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均 ...
- 一种数据与逻辑分离的Python单元测试工具
一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...
- NOPI读取模板导出(Excel中追加数据)
在Controller里,我们定义一个FileResult的Action,返回值是一个文件形式被浏览器下载下来. [HttpGet] public FileResult ExportProductLi ...
- JavaScript中的数据类型转换
本文中提到的“原始值”指的是undefined,null,Boolean,string和number. 本文中的对象是native对象,宿主对象(浏览器定义的对象)按照各自的算法转换. JavaScr ...
随机推荐
- URAL1352. Mersenne Primes
梅森素数 打表 搜梅森素数的时候 看到一句话 欧拉在双目失明的情况下 用心算出了2的31次方-1是素数 他用心算的... #include <iostream> #include<c ...
- github概念和实战
fork: 通过fork操作,你将拥有了别人创建的repo的ownership,但是url却变成了/youraccount/repo,这时你将可以做git push操作 clone: 该命令是直接将r ...
- HDU 1244 Max Sum Plus Plus Plus
虽然这道题看起来和 HDU 1024 Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...
- cookie随便写的一点笔记(抄书的)
cookie是保存在客户端的文本,能够在一定程度上提高用户体验.Servlet API 中提供了Cookie类,可以创建Cookie对象,并通过响应中的addCookie方法,将cookie保存到客户 ...
- spring security的标签库
应用标签库:<%@ taglib prefix='security ' uri='http://www.springframework.org/security /tags' %> < ...
- python练习程序(c100经典例3)
题目: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? for i in range(1,100000): a=i+100; b=a+168; sa=int ...
- (六)6.12 Neurons Networks from self-taught learning to deep network
self-taught learning 在特征提取方面完全是用的无监督的方法,对于有标记的数据,可以结合有监督学习来对上述方法得到的参数进行微调,从而得到一个更加准确的参数a. 在self-taug ...
- [转载] 问题解决:FFmpeg视频编解码库,无法解析的外部信号
在编译FFmpeg相关项目时,可能会出现: error LNK2019: 无法解析的外部符号 "int __cdecl avpicture_fill(struct AVPicture *,u ...
- mysql 数据库自增id 的总结
有一个表StuInfo,里面只有两列 StuID,StuName其中StuID是int型,主键,自增列.现在我要插入数据,让他自动的向上增长,insert into StuInfo(StuID,Stu ...
- Supervisor行为分析和实践
1.简介 Erlang要编写高容错性.稳定性的系统,supervisor就是用来解决这一问题的核心思想.通过建立一颗监控树,来组织进程之间的关系,通过确定重启策略.子进程说明书等参数信息来确定 ...