EJS 中文文檔

jopen 8年前發布 | 84K 次閱讀 HTML JavaScript開發 JavaScript

譯者: 飛龍

來源: ejs

嵌入式 JavaScript 模板

安裝

$ npm install ejs

特性

  • <% %> 用于控制流

  • <%= %> 用于轉義的輸出

  • <%- %> 用于非轉義的輸出

  • -%> 結束標簽用于換行移除模式

  • 帶有 <%_ _%> 的控制流使用空白字符移除模式

  • 自定義分隔符 (例如,使用 '<? ?>' 代替 '<% %>')

  • 包含

  • 客戶端支持

  • 中介JavaScript的靜態緩存

  • 模板的靜態緩存

  • Express 視圖系統兼容

示例

<% 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 對象中。

  • rmWhitespace 移除所有可以安全移除的空白字符,包含前導和尾后的空白字符。同時會為所有scriptlet標簽開啟 -%> 換行截斷的更加安全的模式。(它不會在一行之中去除標簽的換行)。

標簽

  • <% '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 有許多實現:

協議

Apache License, Version 2.0

來自: http://segmentfault.com/a/1190000004286562

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!