什么时候使用玉石模板?

时间:2014-01-14 08:38:39

标签: javascript node.js pug template-engine

发现玉的模板很有意思。但是,目前我无法想象在哪种场景下使用玉器或在哪里应用玉石模板。任何人都可以给我一个实用的场景/例子,其中利用了玉模板的力量。

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

  1. 将这些数据作为JSON发送,以便某些JavaScript客户端构建列表
  2. 在HTML服务器端生成列表
  3. 模板系统对第二种解决方案很有用。

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

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

    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);
    });
    

    并且Jade文件将使用它们:

    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 :(得分:0)

也可以使用模板引擎

服务器端MVC框架
非常像Denys提供的Express示例 例如:ASP.NET MVC's RazorLaravel's Blade,...

静态网站生成器
从动态内容(json,db,...)生成静态站点。如果您不能使用服务器端语言或不想支付费用,则非常有用 例如:Jekyll's Liquid,...

发票应用
模板引擎创建html,然后转换为pdf。或者生成pdfs的任何其他应用程序。