0

Node.js、Express、および Jade を使用していくつかのプロジェクトに取り組んでおり、レイアウト ファイルを分離したいと考えています。メイン ファイル内には既にヘッダーが分離されていますが、データを渡す必要があるサブレイアウトに対してこれを行う方法がわかりません。この場合、ページ上のすべてのビューのウィジェットにデータを渡す必要がありますが、探している簡単な解決策ではなく、データをウィジェットにロードするにはルートが多すぎます。

上記の方法でこのことを行うことができます-すべてのリクエストでビューにデータをロードしますが、これはどういうわけか時間とCPUを消費します。私が考えている別の方法は、ウィジェットのサブレイアウトを作成して、一度データをロードすると、すべてのリクエストで DB からデータを呼び出さずにいつでも利用できるようにすることです。それを行う最善の方法は何ですか?

4

1 に答える 1

0

私は口ひげを扱っていますが、私と同様の戦略を使用できると思います.私が使用するほとんどの口ひげテンプレートには、共通のヘッダーとフッターセクションがあります.スクリプトと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 に答える