0

我正在使用 Node.js、Express 和 Jade 开发一些项目,我想在其中分离布局文件。主文件内部已经是单独的标题,但我不知道如何为需要传递数据的子布局执行此操作。在这种情况下,我需要为页面上的每个视图将数据传递给小部件,但是在路由中将数据加载到小部件中的东西太多,而不是我正在寻找的一些简单的解决方案。

我可以按照我上面描述的方式来做这件事——在每个请求中加载视图中的数据,但这在某种程度上是耗时和 cpu 消耗的。我正在考虑的另一种方法是为小部件创建一些子布局,我将在其中加载一次数据,然后一直可用,而无需在所有请求中从数据库调用数据。最好的方法是什么?

4

1 回答 1

0

我使用mustache,但我认为您可以使用与我类似的策略。在我使用的大多数 mustache 模板中,都有一个通用的页眉和页脚部分。连同脚本和 css 文件。我创建了一个单独的部分文件导出这些部分。例如,我的部分文件如下所示。

exports.partials = function (isAuthenticated)
{
    var menu;

    isAuthenticated ?
     menu = {
         header: '',
         footer: ' '
     } :
    menu = {
        header: '',
        footer: ''
    }
    return menu;
};
exports.staticResources = {
     bootstrap :'//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css',
     fonts : '//netdna.bootstrapcdn.com/font-awesome/3.0/css/font-awesome.css',
     jquery : '//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'        
};

我有另一种名为 generatePartials 的方法,顾名思义,它为我的模板生成部分

exports.generatePartials = function(isAuthenticated){   
var menu = resources.partials(isAuthenticated);
var partials = {
    header : menu.header,
    footer : menu.footer,
    bootstrap : resources.staticResources.bootstrap,
    fonts :resources.staticResources.fonts,
    jquery :resources.staticResources.jquery,
};
return partials;
};

现在在渲染模板时,我要做的就是这个

app.get('/routeName',function (req, res){
var partials = require('../helpers').generatePartials(req.isAuthenticated());
return res.render('viewName.html', partials);
};

就是这样。

于 2013-04-11T10:31:38.883 回答