Node.js学习(14)----EJS模板引擎
这个入门教程将从以下几个方面来讲解:
1. 引入EJS
2. 创建一个模板
3. 使用视图工具组件
4. 使用错误处理组件
5. 什么情况下应使用EJS
引入EJS
在我们正式开始前,我们先来做点准备工作。 你的页面需要引入EJS以使JavaScript能够使用它。 先到Google Code或者SVN库里下载ejs\_production.js文件。
下一步是在你的HTML文件里加入下面一段代码:
<scripttype="text/javascript"src="ejs_production.js"></script>
创建一个模板
简化你的代码的第一步是将你的页面展现(HTML)与你的程序逻辑(JavaScript)分离开来。我们将通过创建一个template来把我们的展现代码抽取出来。 创建一个名叫cleaning.ejs的文件,内容如下:
<h1><%= title %></h1><ul><%for(var i=0; i<supplies.length; i++){ %>
<li>
<a href='supplies/<%= supplies[i] %>'>
<%= supplies[i] %>
</a></li><%} %>
</ul>
你会注意到任何在 <% %>之间的代码都被执行了,而在 <%= %>标签内的都把这自己返回的HTML字符串插入到了当前位置里。 我们需要添加JavaScript代码来控制模板的载入的渲染。 我们将用下面的代码来替换原来的字符串代码:
// load the template file, then render it with datavar html =new EJS({url:'cleaning.ejs'}).render(data);
感觉好些了吗?这个模板还原了HTML代码的结构性,并且JavaScript代码很短也没有歧义。
使用视图工具组件
EJS里包含了很多视图组件,视图组件是用来显示代码,如连接和表单的捷径。 就像Ruby on Rails框架里的一样,它们可以让视图代码保持短小、简单。 超级链接在我们的模板代码里也许会这样写:
<li>
<a href='supplies/<%= supplies[i] %>'>
<%= supplies[i] %>
</a></li>
这段代码看起来仍然很乱,现在有一些内嵌的标签可以让它更小巧。我们可以使用视图组件:
<li><%= link_to(supplies[i],'supplies/'+supplies[i]) %>
</li>
上面的代码看起来更干净更直观。还记得最原始的方式吗?
html +="<li><a href='supplies/"+data.supplies[i]+"'>"
html += data.supplies[i]+"</a></li>"
与最初的JavaScript相比较,一些不太了解你的代码的人可以更容易地通过EJS模板代码看得懂你的代码。 现在让我们放松一下,一起来享受下令人激动的干净简洁的感觉。
使用错误处理组件
一个好的女仆总是会承认自己的错误。如果你在EJS模板里有一个错误,EJS会给你准确地指出是哪一行有错误,只要你引入ejs_jslint.js文件,这个文件可以到\[Google Code\](http://code.google.com/p/embeddedjavascript/ "Downloading ejs_jslint.js from Google Code")里下载。如果你使用FireFox的调试工具Firebug,错误结果会直接在你的控制台里显示。
一个错误的模板代码:
<ul><% foor(var i=0; i<supplies.length; i++){ %>
<li><%= link_to(supplies[i],'supplies/'+supplies[i]) %>
</li><%} %>
</ul>
什么情况下应使用EJS
有的人说写干净整洁的代码应该养成每天的习惯,但是我感觉EJS是一个绝佳的助手,如果你在面对以下几种情况:
1.用JavaScript创建HTML字符串 正如我们在新手教程中所讨论的,在JavaScript中拼字符串的缺点是可维护性不好。当你在JavaScript中将这些字符串拼到一起时,很难看出你正在写的HTML是什么\---|一个你页面展现的结构。而使用模板可以让你通过代码的空行和缩进来清楚地展现出你的HTML。
2.基于WebService的AJAX网站开发 EJS可以接收WebService异步传送过来的JSON格式的数据,将这种数据直接传入你的模板里,然后将结果插入到你的页面中。你所需要做的只是通过以下代码:
new EJS({url:'comments.ejs'}).update('element_id','/comments.json')
很简单,不是吗?
3.程序换肤功能
如果你想给用户自制页面显示的功能,EJS提供了非常适合的机制。EJS的模板只在浏览器里执行,因此对你的服务器没有任何安全风险。你可以允许你的用户上传EJS模板以及其关联的样式表,从而实现定制你的网站页面的功能。
Node.js学习(14)----EJS模板引擎的更多相关文章
- 在js里的ejs模板引擎使用
1.首先需要在页面里引用ejs.min.js. 2.将你的模板使用ejs编写,并存成后缀名.stmpl;(可能需要在打包工具里做些处理) 3.在js里使用require引入xxx.stmpl: con ...
- nodejs-5.1 ejs模板引擎
ejs官方文档:https://ejs.bootcss.com/ 1.什么是 EJS? "E" 代表 "effective",即[高效]. EJS 是一套简单的 ...
- Node.js学习(第四章:初见express)
Express框架是一款简洁而灵活的node.js web应用框架.前面我们自己手动创建服务器在Express中就是一个API的事情,这就使得我们更加注重业务的功能和开发效率上,不必纠结过多底层的事情 ...
- node+ejs模板引擎的应用
前言: 最近在开发一个关于后台管理系统的基础开发平台,解释一下就是不管什么管理系统都有一些相同的功能,但是又有一些细节不一样,这个基础平台就是实现对于基础功能可以进行快速开发,主要有自定义的生成功能代 ...
- 前端笔记之NodeJS(三)Express&ejs模板引擎&请求识别
一.Express框架 1.1基本使用 创建http服务器特别麻烦,express框架解决了这个的问题. Express在node界的地位,就相当于jQuery在DOM界的地位.jQuery的核心就是 ...
- Node.js学习系列总索引
Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...
- 我的Node.js学习历程
学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Swiper+ ejs模板引擎+ iScroll插件知识总结
一. Swiper swiper是一个应用于移动端的动画插件,原理类似于轮播图 官网 http://www.swiper.com.cn/# html结构 <div class="swi ...
随机推荐
- POSIX多线程编程(上)-基本概念
线程概念 我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program).所谓"线程"(Thread),是"进程&q ...
- 求解 s = (1*1)!+(2*2)! + (3*3)!+...+(n*n)! (C语言)
提示:定义函数可以求阶乘,再定义函数求阶乘之和.1和0的阶乘是1,n(n > 1)的阶乘是n * (n-1) * (n - 2) * … * 1 //采用了函数嵌套调用和函数递归调用 //求解阶 ...
- CF Codeforces Round #231 (Div. 2)
http://codeforces.com/contest/394 话说这次CF做的超级不爽,A题一开始交过了,我就没再管,B题还没看完呢,就死困死困的,后来觉得B题枚举一下估计能行,当时是觉得可以从 ...
- MySql从服务器延迟解决方案
在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下:Master_Log_File: SLAVE中的I/ ...
- Codeforces Burning Midnight Oil
/* * BurningMidnightOil.cpp * * Created on: 2013-10-12 * Author: wangzhu */ /** * 每次至少写多少行代码ret: * 1 ...
- delphi xe3的helper语法 good
在C#中有一个很有用的helper保留字,它可以让我们对已有的类添加额外功能,当时就在想delphi有这个保留字就好了,这样许多控件就不需要继承重写了.后来delphi 果然有了这个语法,到delph ...
- lib-flexible 结合 WKWebView 的样式错乱解决方法
技术栈 lib-flexible 是淘宝的可伸缩方案 WKWebView 是ios8以上支持的网页控件 问题场景 最新公司一个项目使用 lib-flexible 来做移动端的伸缩解决方案,页面在saf ...
- Android 图片从网页中获取并动态加载到listview中
实现功能: 效果图: 代码:这里
- SQL Server中时间段查询
/****** Script for SelectTopNRows command from SSMS ******/ select * from dbo.VehicleData20100901 wh ...
- Form - 遍历行
go_block('block_name'); first_record; LOOP message(:block_name.item); if :system.last_record = ...