zoukankan      html  css  js  c++  java
  • EJS References

    今天在照着教程写代码的时候,发现在express组件里面使用partial()会有编译错误,网上一查,原来新版的ejs已经不支持partial了,取而代之的是include关键词。

    而且ejs的文档还不好找,找了半天才找到“官方”的,好简单。。


    https://github.com/visionmedia/ejs#includes


    另外,有一些关于移植express 2.0 --> 3.0的:

    https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

    http://jimpravetz.com/blog/2012/08/express-3-migration-issues/

    http://cnodejs.org/topic/503bb8d9f767cc9a5113eef3

    http://cnodejs.org/topic/501f5d8ff767cc9a51c98165


    2012-12-11: 最新发现,express.js支持partial()函数,不过需要安装express-partial组件。


    EJS

    Embedded JavaScript templates.

    Installation

    $ npm install ejs
    

    Features

    • Complies with the Express view system
    • Static caching of intermediate JavaScript
    • Unbuffered code for conditionals etc <% code %>
    • Escapes html by default with <%= code %>
    • Unescaped buffering with <%- code %>
    • Supports tag customization
    • Filter support for designer-friendly templates
    • Includes
    • Client-side support
    • Newline slurping with <% code -%> or <% -%> or <%= code -%> or <%- code -%>

    Example

    <% if (user) { %>
        <h2><%= user.name %></h2>
    <% } %>
    

    Usage

    ejs.compile(str, options);
    // => Function
    
    ejs.render(str, options);
    // => str
    

    Options

    • cache Compiled functions are cached, requires filename
    • filename Used by cache to key caches
    • scope Function execution context
    • debug Output generated function body
    • compileDebug When false no debug instrumentation is compiled
    • client Returns standalone compiled function
    • open Open tag, defaulting to "<%"
    • close Closing tag, defaulting to "%>"
    • * All others are template-local variables

    Includes

    Includes are relative to the template with the include statement, for example if you have "./views/users.ejs" and "./views/user/show.ejs" you would use <% include user/show %>. The included file(s) are literally included into the template, no IO is performed after compilation, thus local variables are available to these included templates.

    <ul>
      <% users.forEach(function(user){ %>
        <% include user/show %>
      <% }) %>
    </ul>
    

    Custom delimiters

    Custom delimiters can also be applied globally:

    var ejs = require('ejs');
    ejs.open = '{{';
    ejs.close = '}}';
    

    Which would make the following a valid template:

    <h1>{{= title }}</h1>
    

    Filters

    EJS conditionally supports the concept of "filters". A "filter chain" is a designer friendly api for manipulating data, without writing JavaScript.

    Filters can be applied by supplying the : modifier, so for example if we wish to take the array[{ name: 'tj' }, { name: 'mape' }, { name: 'guillermo' }] and output a list of names we can do this simply with filters:

    Template:

    <p><%=: users | map:'name' | join %></p>
    

    Output:

    <p>Tj, Mape, Guillermo</p>
    

    Render call:

    ejs.render(str, {
        users: [
          { name: 'tj' },
          { name: 'mape' },
          { name: 'guillermo' }
        ]
    });
    

    Or perhaps capitalize the first user's name for display:

    <p><%=: users | first | capitalize %></p>
    

    Filter list

    Currently these filters are available:

    • first
    • last
    • capitalize
    • downcase
    • upcase
    • sort
    • sort_by:'prop'
    • size
    • length
    • plus:n
    • minus:n
    • times:n
    • divided_by:n
    • join:'val'
    • truncate:n
    • truncate_words:n
    • replace:pattern,substitution
    • prepend:val
    • append:val
    • map:'prop'
    • reverse
    • get:'prop'

    Adding filters

    To add a filter simply add a method to the .filters object:

    ejs.filters.last = function(obj) {
      return obj[obj.length - 1];
    };
    

    Layouts

    Currently EJS has no notion of blocks, only compile-time includes, however you may still utilize this feature to implement "layouts" by simply including a header and footer like so:

    <% include head %>
    <h1>Title</h1>
    <p>My page</p>
    <% include foot %>
    

    client-side support

    include ./ejs.js or ./ejs.min.js and require("ejs").compile(str).


  • 相关阅读:
    Thinkphp3.2.3如何加载自定义函数库
    mysql 字段引号那个像单引号的撇号用法
    php cli模式学习(PHP命令行模式)
    Django model 表与表的关系
    Django model 字段详解
    Django model 中的字段解释
    python系列-1 字符串操作
    nginx-匹配规则
    ansible系列3-pyYAML
    ansible系列2-常用命令
  • 原文地址:https://www.cnblogs.com/puncha/p/3877022.html
Copyright © 2011-2022 走看看