JavaScript模板引擎学习分享

为了将数据库中的一组记录转换成HTML输出到界面上,大家都采用哪些做法呢?

在WebForm时代我们经常使用datagrid、repeater,当MVC问世后我们开始直接在视图上编写C#循环语句,而现在我更喜欢使用JavaScript模板引擎来生成HTML。因为这种做法的最大好处是实现了前后端代码的解耦,前端开发人员也无需了解太多的C#知识。

用法与示例:

第一步,在页面中引入JavaScript模板引擎:

function template(str, data) {
    var strFunc =
    "var p=[],print=function(){p.push.apply(p,arguments);};" +
            "with(obj){p.push(‘" +
    str.replace(/[\r\t\n]/g, " ")
       .replace(/‘(?=[^#]*#>)/g, "\t")
       .split("‘").join("\\‘")
       .split("\t").join("‘")
       .replace(/<#=(.+?)#>/g, "‘,$1,‘")
       .split("<#").join("‘);")
       .split("#>").join("p.push(‘")
       + "‘);}return p.join(‘‘);";
    func = new Function("obj", strFunc);
    return func(data);
}

第二步,准备HTML模板:

<script type="text/html" id="temp_class">
    <# for(var i=0;i<datalist.length;i++){ #>
        <div class="panle">       课程编号:<#= datalist[i].ClassId #>        课程名称:<#= datalist[i].ClassName #>
        </div>
    <# } #>
</script>

第三步,准备数据与输出HTML:

function loadPage() {
    var classList = [
        { ClassName: "数据结构", ClassId: "1001", CreateOn: "2015-05-01 08:20:36", CreatedBy: "管理员"},
        { ClassName: "线性代数", ClassId: "1003", CreateOn: "2015-05-03 19:21:25", CreatedBy: "管理员"},
        { ClassName: "高等数学", ClassId: "1004", CreateOn: "2015-05-03 19:20:39", CreatedBy: "管理员"}
    ];
    var strTempHTML = document.getElementById("temp_class").innerHTML;
    document.getElementById("class_list").innerHTML = template(strTempHTML, { datalist: classList });
}

备注:classList对象是需要后端开发人员输出的,在MVC中我们可以直接使用ViewBag对象将后端变量输出到JavaScript代码中。

效果预览:

其它模板引擎介绍:Underscore.js

优点总结:

1、前端人员可以更加自由的对HTML结构进行更改,不再依赖后台开发。

2、模板语法支持if等JavaScript语法,用法简单,减小了代码复杂度。

3、HTML代码结构清晰,可阅读性强。

本文DEMO:下载地址

时间: 2024-10-10 17:32:35

JavaScript模板引擎学习分享的相关文章

Javascript模板引擎分享

模板引擎的主要功能就是把变化的数据融入到不变的模板中,并生成最终结果.目前,前端的主要数据格式无非是XML和JSON.如何将这些数据更加方便的呈现呢? 最近看了很多的PHP模板引擎,今天看到了一个非常棒的Javascript模板引擎,用以更方便的呈现前台数据.它的一个超级简单的.快速的,高速缓存的,非常容易使用的模板引擎. 下面就来看下这个模板引擎是如何工作的. // Simple JavaScript Templating // John Resig - http://ejohn.org/ -

artTemplate模板引擎学习实战

在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javascript引擎.而javascript引擎的实质就是帮我们把带有JavaScript代码的伪THTML语句编译为HTML. 如果有不了解的朋友,可以前往这两篇文章: 淘宝购物车页面 PC端和移动端实战 淘宝购物车页面 智能搜索框Ajax异步加载数据 源码地址: GitHub:Uncle-Keith 回

JavaScript模板引擎

JavaScript模板引擎实例应用 在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.artTemplate.doT.baiduTemplate.kissyTemplate等模板引擎. 本文将举实例向大家讲解几个常用模板引擎的简单使用. 演示地址:模板引擎示例http://demo.52fhy.com/jstemp/ 准备工作 演示数据:blog.json结构:

发布一个开源极致的javascript模板引擎tpl.js

tpl.js(大家直接去https://git.oschina.net/tianqiq/tpl.js这个上面看) 简介 tpl.js是一个比较极致(极小,极快,极简单)的js模板引擎,可以在各种js环境中使用. 特性 1. 使用js作为模板语言,几乎无学习成本 2. 小巧,速度快到极致 3. 极简的语法,模板书写非常流畅 4. mit开源,无限制 语法说明 简述 tpl.js中模板语法中以行为单一,分为js行语句,和输出行语句.顾名思义,js行语句是编译时候会当做js执行的语句, 而输出行语句,

Javascript模板引擎mustache.js详解

mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深,纯粹是入门内容,看看即可.不过要是你还没有用过此类的javascript引擎库,那么本文还是值得你一读的,相信在你了解完它强大的功能和简单用法之后,一定会迫不及待地将之用于你的工作当中. 1. 从一个简单真实的需求讲起 目前公司做了一个统一的开发平台,后台封装了MVC的接口和数据增删改查的接口,前

JavaScript模板引擎实例应用(转)

本文将举实例向大家讲解几个常用模板引擎的简单使用. 演示地址:模板引擎示例http://demo.52fhy.com/jstemp/ 准备工作 演示数据:blog.json结构: { "list": [ { "title": "这是title", "url": "http://www.cnblogs.com/52fhy/p/5271447.html", "desc": "摘要&

JavaScript模板引擎原理与用法

这篇文章主要介绍了JavaScript模板引擎原理与用法,结合实例形式详细分析了javascript模版引擎相关概念.原理.定义及使用方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下 一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years old.'; 通过模板引擎函数把数据塞进去, var data = { &q

推荐13款javascript模板引擎

javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 2. EasyTemplate 在使用过Freemarker模 板后,感觉它的 语法比较朴实,平易近人,容易上手,于是决定按它的语法风格实现一个前端的 模板引擎,这就有了

新一代 javascript 模板引擎

artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <script type="text/javascript" src="js/template.js"></script> <