2014-01-14 55 views
3

发现玉模板有趣。然而,目前我无法想象在哪种情况下玉会被使用或在哪里应用玉模板。任何人都可以给我一个实际的场景/例子,其中玉石模板的力量是杠杆化的。何时使用玉模板?

谢谢!

回答

3

想象一下,您有一个应用程序计算服务器端的某些值,例如聊天室中的房间列表。

然后你有2个合理的解决方案:

  1. 发送这些数据作为JSON为了让一些JavaScript客户端建立列表
  2. 生成HTML服务器端列表

一模板系统对于第二种解决方案非常有用。

要生成这个HTML,而不是让你的nodejs程序连接HTML片段,模板引擎是一个很好的解决方案。

服务器会生成数据(这里使用的快递和获取从关系数据库中的数据)的JS部分:

app.get('/rooms', ensureAuthenticated, ensureCompleteProfile, function(req, res){ 
     db.on(req.user.id) 
     .then(function(uid){ 
       return [ 
         this.listAccessibleRooms(uid), 
         this.fetchUserPingRooms(uid, 0) 
       ] 
     }).spread(function(accessibleRooms, pings){ 
       var rooms = {public:[], private:[]}; 
       accessibleRooms.forEach(function(r) { 
         r.path = roomPath(r); 
         rooms[r.private?'private':'public'].push(r); 
       }); 
       res.render('rooms.jade', { rooms:rooms, pings:pings }); 
     }).finally(db.off); 
}); 

和玉器文件将使用它们:

table.list 
     each room, i in rooms.public 
       tr 
         th: a(href=room.path) #{room.name} 
         td.rendered #{room.description} 
         if room.auth 
           td.role= room.auth 

它生成这种HTML:

<table class="list"> 
    <tr> 
     <th><a href="path1">Room 1</a></th> 
     <td class="rendered">Description of room 1</td> 
     <td class="role">Admin</td> 
    </tr> 
    <tr> 
     <th><a href="path2">Room 2</a></th> 
     <td class="rendered">Description of room 2</td> 
    </tr> 
</table> 

这分开了一些关注点正在管理数据并显示它们。它的优点是不会与HTML差别太大,在我看来,HTML的目标是生成HTML。

本示例摘自my open source Miaou chat。完整的Jade文件是rooms.jade

+1

@destroy,感谢您的信息。看起来像一个很好的学习曲线NodeJS + Express + Jade :) –

+1

在我个人看来,一个复杂的应用程序将使用这两种解决方案:发送一些数据作为json(在ajax中,或使用websocket)或使用Jade生成静态HTML。当我需要在JS客户端处理数据时,我也有时使用Jade以一种混合的方式在页面中嵌入JSON:https://github.com/Canop/miaou/blob/master/views/login .jade#L20 –

+0

发生故障时,可以在客户端和服务器端使用jade,因此您可以将数据作为json发送到客户端,并在其中呈现html以插入它。 Jade适合两种情况。 – alex

0

模板引擎也可以用来

服务器端的MVC框架
很像丹尼斯提供的快递例子。
例如:ASP.NET MVC's RazorLaravel's Blade ...

静态网站发生器
生成动态内容(JSON,一个数据库,...)静态站点。如果您不能使用服务器端语言或不想付费,这很有用。
例如:Jekyll's Liquid,...

的发票应用
模板引擎生成HTML,然后将其转化为pdf。或者任何其他生成pdf的应用程序。