何时使用jade模板?

3

发现Jade模板引擎很有趣。然而,我目前无法想象在哪种情况下会使用Jade或者何时应用Jade模板引擎。是否有任何实际场景/示例能够展示Jade模板引擎的强大之处呢?

谢谢!

2个回答

4
假设你有一个应用程序在服务器端计算某些值,例如聊天室中的房间列表。
那么你有两个合理的解决方案:
1. 将这些数据作为JSON发送,以便一些JavaScript客户端构建列表。 2. 在服务器端生成HTML列表。
模板系统对于第二种解决方案非常有用。
为了生成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是很好的。

这个例子来自我的开源Miaou聊天室。完整的Jade文件在rooms.jade中。


1
@destroy,感谢提供的信息。看起来学习 NodeJS + Express + Jade 是一个不错的选择 :) - msapkal
1
在我个人看来,一个复杂的应用程序会同时使用两种解决方案:将一些数据作为JSON发送(在ajax中或使用websocket),或者使用Jade生成静态HTML。有时候,当我需要在JS客户端处理数据时,我也会使用Jade将JSON嵌入到页面中,这是一种混合方法:https://github.com/Canop/miaou/blob/master/views/login.jade#L20 - Denys Séguret
dystroy,Jade 可以在客户端和服务器端使用,因此您可以将数据作为 JSON 发送到客户端并在那里呈现 HTML 以插入它。Jade 在这两种情况下都很适合。 - alex
@alex 是的,它可以(对于其他读者:您可以使用类似https://github.com/domenic/jadeify的东西,但我从未使用过),但我不确定它是否是一个完整的通用解决方案,因为通常,如果您想要在客户端构建页面元素,那么这是因为您有比Jade更容易提供的更复杂的东西。 - Denys Séguret
人们通常想在客户端构建元素,只有一个原因:他们想在不重新加载页面的情况下更新页面。这可以很容易地通过jade完成,我相信它适用于一般解决方案。 - alex

0

模板引擎也可以使用

服务器端MVC框架
与Denys提供的Express示例非常相似。
例如:ASP.NET MVC的Razor, Laravel的Blade,...

静态网站生成器
从动态内容(json、数据库等)生成静态网站。如果您无法使用服务器端语言或不想支付费用,则非常有用。
例如:Jekyll的Liquid,...

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接