5

Node.js と Express を使用しています。1 組の jade ファイルがあるとします。

template.jade

html
  body
    block page-content

たとえば .jade

extends template
    block page-content
        p
           |  Lorem ipsum yadda yadda

example.jade をレンダリングすると、その段落タグを template.jade の body タグにプラグインした結果が得られます。これは通常、私が望むものです。

私の問題は、pushState と History API を使用してこれらのファイルをロードしようとしていることです (明らかに、これらのファイルではありません)。その際、ページ コンテンツ ブロックのコンテンツを返すだけのリクエストが必要です。完全な html ドキュメントの残りの部分なしで、それ自体。ブロック自体をレンダリングし、テンプレートに埋め込まないように Jade に指示する簡単な方法はありますか?


私が思いついた最善の方法は、次のように変更することでした。

たとえば .jade

extends template
  block page-content
    import example-content

example-content.jade

p
  | Lorem ipsum yadda yadda

しかし、このような余分なファイルを作成するのはハックに思えました。

4

1 に答える 1

0

Jade は実行可能コードをサポートしています。接頭辞 - (バッファリングなし) を使用する場合。たとえば、メイン レイアウトの jade テンプレートでif ステートメントを使用できます。

- if (renderType && renderType == 'page') {
    doctype 5
    html
      head
        title= title
      body
- }
        block content

次のような HTML ページをレンダリングします。

  res.render('index', { title: 'StackOverflow', renderType: 'page' });

次のような html ブロッ​​クをレンダリングします。

  res.render('index', { title: 'StackOverflow', renderType: 'block' });

また、すべてのレンダー式でrenderType変数を使用したくない場合は、次を使用します

res.locals(obj) //*Assign several locals with the given obj. The following are equivalent:*

すべてのリクエストのデフォルト値を設定します。アプリの追加ハンドラーを開始する場所:

var logger = function(req, res, next)
{
    res.locals({renderType:'page'});
    next();
};

app.use(logger);
于 2013-08-05T20:32:08.347 に答える