1

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

是否有一些方法或过滤器或与它非常相似的东西,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};
4

1 回答 1

1

一个可能的解决方案可能是JadeAsset另请参阅此处的讨论。

您可以将资产挂钩到 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'
    })
]);
于 2013-01-01T20:06:23.510 回答