Page 106 - Node.js开发指南
P. 106

5.4  模板引擎    99


                   ejs 的标签系统非常简单,它只有以下3种标签。                                                           1
                     <% code %>:JavaScript 代码。
                     <%= code %>:显示替换过 HTML 特殊字符的内容。
                     <%- code %>:显示原始 HTML 内容。
                   我们可以用它们实现页面模板系统能实现的任何内容。                                                           2

               5.4.3  页面布局

                   上面的例子介绍了页面模板的翻译,但我们看到的不止这两行,原因是 Express 还自动                                        3
               套用了 layout.ejs,它的内容是:

                   <!DOCTYPE html>
                   <html>
                                                                                                      4
                     <head>
                       <title><%= title %></title>
                       <link rel='stylesheet' href='/stylesheets/style.css' />
                     </head>
                     <body>
                       <%- body %>
                     </body>                                                                          5
                   </html>
                   layout.ejs 是一个页面布局模板,它描述了整个页面的框架结构,默认情况下每个单独的
               页面都继承自这个框架,替换掉 <%- body %> 部分。这个功能通常非常有用,因为一般为
                                                                                                      6
               了保持整个网站的一致风格,HTML  页面的<head>部分以及页眉页脚中的大量内容是重复
               的,因此我们可以把它们放在 layout.ejs 中。当然,这个功能并不是强制的,如果想关闭它,
               可以在 app.js 的中 app.configure 中添加以下内容,这样页面布局功能就被关闭了。
                                                                                                      7
                   app.set('view options', {
                     layout: false
                   });
                   另一种情况是,一个网站可能需要不止一种页面布局,例如网站分前台展示和后台管理
                                                                                                      8
               系统,两者的页面结构有很大的区别,一套页面布局不能满足需求。这时我们可以在页面模
               板翻译时指定页面布局,即设置 layout 属性,例如:


                   function(req, res) {
                                                                                                      9
                     res.render('userlist', {
                       title: '用户列表后台管理系统',
                       layout: 'admin'
                     });
                   };
                   这段代码会在翻译 userlist 页面模板时套用 admin.ejs 作为页面布局。                                        10
   101   102   103   104   105   106   107   108   109   110   111