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 ...
随机推荐
- 在LINUX上创建GIT服务器【转】
转自:http://blog.csdn.net/xiongmc/article/details/9176785 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. Cli ...
- GMT与UTC
时间概念 — 24时区.GMT.UTC的意涵 许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time ,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘 ...
- django模型中的抽象类(abstract)
首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ...
- Gumshoe - Microsoft Code Coverage Test Toolset
Gumshoe - Microsoft Code Coverage Test Toolset 2014-07-17 What is Gumshoe? How to instrument a binar ...
- 转:最值得学习阅读的10个C语言开源项目代码
阅读优秀代码是提高开发人员修为的一种捷径…… 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试 ...
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...
- hibernate lazy=false annotation设置
工程报错如下: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 解决方法: 在类的 ...
- Mobile Assistant
闲来无事,分享一个小东西--手机小助手,历时两周,这里选择几个不错的界面以示效果! 如果有感兴趣的部分,欢迎随时交流!
- 51nod1262 扔球
相关讨论里的答案:(by mint_my ) 1.反弹n次,那起点S,每次反弹点,终点S共连接n+1条边,那么原问题变为从S走n+1条边回到S,为令n=n+12.设步长为a条边,gcd(a,n)==1 ...
- mysql笔记(前面自己写的不标准有些地方)
day15-MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: l 可存储大量数据: l 方便检索: l 保持数据的一 ...