在视图中获取编译的jade模板?

时间:2012-12-31 05:21:25

标签: node.js express pug

我有一个“部分”模板,我想在客户端和服务器端使用它。

是否存在某些方法或过滤器或与include非常相似的东西,除了不是立即执行模板,它返回一个客户端编译的函数,然后我可以将其分配给JS变量并在整个脚本中使用?

目前,我正在这样做:

exports.list = function(req, res){
    res.render('file/list', {
        ...
        fileItemTemplate: jade.compile(fs.readFileSync(path.join(req.app.get('views'),'file','file-item.jade')), {client: true})
    });
};

然后在我的模板中我有:

ul#folder-list.thumbnails
    each file in files
        include file-item

...

script(type='text/javascript')
    var fileItemTemplate = !{fileItemTemplate};

通过这种方式,我可以在页面加载时将一些项目渲染为HTML,然后通过在数据进入时渲染部分来添加更多项目。

这有效,但它感觉不是很干,因为我必须读入文件,并处理路径中的文件路径和内容,然后基本上重新声明完全相同的变量客户端。

这样做有什么好办法吗?

这样的事情是理想的:

script(type='text/javascript')
    var fileItemTemplate = !{compile file-item};

1 个答案:

答案 0 :(得分:1)

可能的解决方案可能是JadeAsset。另见讨论here

您可以将资产挂钩到Express:

assets.on('complete', function() {
    var app = express.createServer();
    app.configure(function() {
        app.use(assets);  // that's all you need to do
    });
    app.listen(8000);
});

创建您的Jade资产:

var assets = new AssetRack([
    new rack.JadeAsset({
        url: '/templates.js',
        dirname: __dirname + '/templates'
    })
]);