譯者: 飛龍 來源: ejs
嵌入式 JavaScript 模闆
安裝
$ npm install ejs
特性
-
用于控制流<% %>
-
用于轉義的輸出<%= %>
-
用于非轉義的輸出<%- %>
-
結束标簽用于換行移除模式-%>
- 帶有
的控制流使用空白字元移除模式<%_ _%>
- 自定義分隔符 (例如,使用 ‘
示例
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
用法
var template = ejs.compile(str, options);
template(data);
// => 渲染 HTML 字元串
ejs.render(str, data, options);
// => 渲染 HTML 字元串
你也可以使用快捷方式
ejs.render(dataAndOptions);
,其中你可以通過一個對象來傳遞任何東西。在這種情況下,你需要以一個裝有所有需要傳遞對象的本地變量結束。
選項
-
編譯過的函數會被緩存,需要cache
filename
-
被filename
用做緩存的鍵,用于包含cache
-
函數執行的上下文context
-
如果為compileDebug
,不會編譯調試用的工具false
-
傳回獨立的編譯後的函數client
-
開啟或者閉合尖括号所用的字元delimiter
-
輸出生成的函數體debug
-
是否使用_with
結構。如果為with() {}
則局部資料會儲存在false
對象中。locals
-
移除所有可以安全移除的空白字元,包含前導和尾後的空白字元。同時會為所有scriptlet标簽開啟rmWhitespace
換行截斷的更加安全的模式。(它不會在一行之中去除标簽的換行)。-%>
标簽
-
‘Scriptlet’ 标簽, 用于控制流,沒有輸出<%
-
向模闆輸出值(帶有轉義)<%=
-
向模闆輸出沒有轉義的值<%-
-
注釋标簽,不執行,也沒有輸出<%#
-
輸出字面的 ‘<%’<%%
-
普通的結束标簽%>
-
Trim-mode (‘newline slurp’) 标簽, 移除随後的換行符-%>
包含
包含要麼是絕對路徑,或者如果不是的話,被視為相對于調用
include
的模闆的路徑(需要
filename
選項)。 例如,你在
./views/users.ejs
中包含
./views/user/show.ejs
,你應該使用
<%- include('user/show') %>
。
你可能會用到原始輸出标簽(
<%-
)避免二次轉義HTML輸出。
<ul>
<% users.forEach(function(user){ %>
<%- include('user/show', {user: user}) %>
<% }); %>
</ul>
包含的内容在運作時插入, 是以你可以在
include
調用中使用變量作為路徑(例如
<%- include(somePath) %>
)。在你頂級資料對象中的變量都可以用于所有的包含,而局部變量需要傳遞進來。
注意:仍然支援包含預處理指令(
<% include user/show %>
)。
自定義分隔符
自定義分隔符可以以模闆為機關應用,或者全局:
var ejs = require('ejs'),
users = ['geddy', 'neil', 'alex'];
// Just one template
ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'});
// => 'geddy | neil | alex'
// Or globally
ejs.delimiter = '$';
ejs.render('<$= users.join(" | "); $>', {users: users});
// => 'geddy | neil | alex'
緩存
EJS 自帶了一個基本的運作時緩存,用于緩存渲染模闆的中介JavaScript函數。使用 Node 的
lru-cache
庫來添加LRU緩存十分簡單:
var ejs = require('ejs')
, LRU = require('lru-cache');
ejs.cache = LRU(100); // LRU cache with 100-item limit
如果你想清除ejs的緩存,調用
ejs.clearCache
。如果你需要以一個不同的限額來使用LRU,隻需要将
ejs.cache
重新設定為一個LRU的新執行個體。
布局
EJS 不會特别地支援區塊,但是可以采用包含頭部和尾部的方法來實作局部,像這樣:
<%- include('header') -%>
<h1>
Title
</h1>
<p>
My page
</p>
<%- include('footer') -%>
用戶端支援
通路
最新釋出,下載下傳
./ejs.js
或者
./ejs.min.js
選擇其一包含到你的頁面中,并且使用
ejs.render(str)
相關項目
EJS 有許多實作:
- TJ 的實作,這個庫的 v1 版本: https://github.com/tj/ejs
- Jupiter Consulting 的 EJS: http://www.embeddedjs.com/
- Google Code 上的 EJS 嵌入式 JavaScript 架構: https://code.google.com/p/embeddedjavascript/
- Sam Stephenson 的 Ruby 實作: https://rubygems.org/gems/ejs
- Erubis,ERB 實作,也可以運作JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript