最近所在的项目页面使用纯静态HTML,所有动态内容都通过ajax加载生成,在JS中拼凑HTML片段比较繁琐,有同事推荐使用EJS——一个JS的模板引擎上手简单,使用方便.这里给大家简单介绍一下.
一、场景:
页面提交ajax查询,服务器返回一段json,客户端根据json内容动态生成table展现.
二、EJS用法
1.模板
与jsp的script类似,位于<% %>之间的JavaScript会被解释执行,而<%= %>则会把表达式的值输出到页面.
2.渲染:
html = new EJS({url: '/template.ejs'}).render(data);
或
new EJS({url:'/todo.ejs'}).update('todo','/todo.json');
三、示例
这是我们要实现的table:
接着看看服务器返回的json长啥样:
[{ "2015-09-06": { "strife": 1, "longen": 13 }, "2015-09-07": { "strife": 0, "longen": 15 }, "total": { "strife": 1, "longen": 28 } }]
页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ejs demo page</title> <link rel="stylesheet" href="demo.css" type="text/css" /> </head> <body> <h3>ejs demo page</h3> <div id="content"> <input type="button" value="generate table" id="genTableBtn" /> <div id="dataTable"></div> </div> <script src="jquery-1.11.3.min.js"></script> <script src="ejs.js"></script> <script src="demo.js"></script> </body> </html>
为便于遍历,我们的json对象需要做些转换:
var transformData = function(data) { var myObj = {}; var contents = []; var maps = []; for (var p in data[0]) { var content = {}; var contentArray = []; if (p == 'total') { content.contentTitle = '总数'; } else { content.contentTitle = p; } for (var pp in data[0][p]) { contentArray.push(data[0][p][pp]); } content.contentArray = contentArray; contents.push(content); } for (var ppp in data[0]['total']) { maps.push(ppp); } myObj.contents = contents; myObj.maps = maps; return myObj; }
接着设计table的模板:
<table> <thead> <tr> <th>日期</th> <% for(var p in myObj.maps) { %> <th><%= myObj.maps[p] %></th> <% } %> </tr> </thead> <tbody> <% for(var content in myObj.contents) { %> <tr> <td> <div align="center"><%= myObj.contents[content].contentTitle %></div> </td> <% for(var item in myObj.contents[content].contentArray) { %> <td> <div align="center"><%= myObj.contents[content].contentArray[item] %></div> </td> <% } %> </tr> <% } %> </tbody> </table>
ajax请求json,然后生成table:
$(function() { var loadTable = function() { $.ajax({ type: "get", datatype: "json", url: "data.js", success: function(data) { var myObj = transformData(JSON.parse(data)); var htmlTable = new EJS({ url: 'demo.ejs' }).render({ myObj: myObj }); $('#dataTable').html(htmlTable); decorateTable(); }, error: function(e) { console.log(e); } }); }; var decorateTable = function() { $("tr:odd").addClass("odd"); $("tr:even").addClass("even"); $("th").addClass("thead"); } $("#genTableBtn").bind("click", loadTable); });
以上代码已经放到:
https://github.com/lixuanbin/ejs-demo
四、参考资料
官方页面:
还有一个服务端nodejs的版本(需科学上网):
http://ejs.co/
相关推荐
micro-template 是一个基于 JavaScript 的模板引擎,类似于 embed js。 这受到启发,但具有更高效的功能: 更好的错误消息:在运行时错误中显示行号 支持源映射:在 Chrome 上调试更容易,包括语法错误 测试良好...
克隆仓库: https://github.com/dilagurung/nodejs-ejs-mysql.git : https://github.com/dilagurung/nodejs-ejs-mysql.git 安装软件包: npm install 编辑数据库配置: config/database.js 创建数据库模式: ...
基于 EJS ( ) 的快速、独立的 Javascript 模板引擎,灵感来自 Rails 的 ERB ( )。 快速地 TL/DR - 基准: 1.0.1 1.0.0 比原始 EJS 快 10 倍 排名与或击败最受欢迎的产品,包括 Mustache、Handlebars、Dust 和 ...
eko-koa 基于EJS,Knex anf Objection的Koa入门包。 对于Sails和Adonis这样的框架,这是理智的选择。 欢迎公关和分叉! 要求和安装: 要求:节点8+ ... 迁移和播种数据库: npm run knex -- migrate:... EJS(模板引擎)
嵌入JavaScript模板EJS 基于CoffeeScript的模板引擎CoffeeKup 的NodeJS版本jQuery模板引擎 视图渲染(view randering) 视图的文件名默认需遵循“<name>.”的形式,这里是要被加载的模块的名字。比如视图layout.ejs...
最近有一个项目,还是使用的传统 MVC 模式开发,完全基于jQuery,使用了基于java模板引擎velocity,页面中嵌入了大量java语法,使得前后端分离不彻底,工程打包上线苦不堪言,为实现后端为服务化,前端也得彻底从...
节点配置文件和作业门户 ... 遵循MVC准则和文件夹结构。 用户详细信息存储在MongoDB文档中,其中包含用于登录信息和配置文件详细信息的单独对象。 ... 用户可以选择以所有主要文档和图像格式上载简历和个人资料图片。...
blog 基于node的简单博客后台 Express4.10框架 + ejs模板引擎 + mongodb数据库 持续学习完善中.
EJS(NodeJ模板引擎) JavaScript HTML CSS MySQL 安装过程 使用npm int命令设置Node存储库。 运行以下命令以安装所需的依赖项npm install body-parser编译运行connect-flash cookie-parser ejs express ...
已引入的dot模板引擎用于渲染页面引入的动态数据等,静态数据可通过ejs模板直接解析; 公共css、js等已做打包拆分优化; layouts模板可根据实际业务需求调整,项目中只做了基本的布局,旨在给出传参等配置写法; 项目中...
使用手写笔作为css预处理器,使用ejs作为模板引擎2.默认情况下支持zh-CN和en 3.同时支持PC和移动hexo-theme-PureBlue基于Hexo 3.8.0的简单蓝色样式主题。 演示功能1.使用手写笔作为css预处理器,使用ejs作为模板引擎...
functmpl 是一个基于JavaScript/Nodejs的高扩展性的模板引擎 模板格式 <#包含/> 如果想在一个模板中插入另一个模板,可以使用<#包含/> 比如插入模板 a.ftl : <#a.ftl/> <@功能/> 除了输出变量、包含...
使用 vue 替换 ejs 模板引擎。 默认未安装 vue-router 基于 vue-cli 修改,性能更优。 の更新到 0.2 版本 使用 ejs 为新的模板引擎 添加 static 静态文件夹 第三方库的引入有两种可选方式 の 0.1.3 生产环境与开发...
Ejs模板引擎 猫鼬 jQuery的 语义UI JsonWebToken用于身份验证 资料夹结构 bin :它包含启动节点服务器的主文件'www' config :所有可配置的参数和凭据 data :json数据 日志:这里的日志转储 中间件:此处定义的...
将文件发送到特定的邮件 自动通知 React性技术领域 NodeJS v12.18.3(用于开发环境) MongoDB v3.6.3(用于数据库) Express v4.17.1(用于处理HTTP请求) Ejs v3.1.5(作为模板引擎) Multer v1.4.2(用于处理“多...
##职位管理系统1.创建基于ejs模板引擎的项目结构:express -e //创建目录结构npm install //安装依赖npm start //启动服务器2.所有前端静态资源放在public目录
EJS -作为模板引擎。 一个有用的通用,使网页干净。 REST模型配置。 将数据持久化到 MongoDB 中。 类的使用。设置#####去做试试看#####去做截图#####主屏幕 #####用户列表 #####用户编辑屏幕
1.创建基于ejs模板引擎的项目结构: express -e //创建目录结构 npm install //安装依赖 npm start //启动服务器 2.所有前端静态资源都放置在 public 目录中。将 bootstrap 依赖的资源放置到 public 目录下 布局
模板引擎-EJS。 CRUD操作在管理员部分中实现。 在主页上,懒惰加载的实现是借助AJAX和MongoDB的跳过和限制方法来预览帖子。 注释也有延迟加载的形式。表单通过AJAX发送。 添加喜欢或新注释后,带有模块nodemailer....
EJS -作为模板引擎。 一个有用的通用,使网页干净。 REST模型配置。 使用 ORM 将数据保存到 Postgres 数据库中。 围绕领域模型的领域驱动设计 Java 脚本用法。 异步函数的使用。 设置 安装 (如果还没有) 从...