0

私は小さなドキュメント Web サイトに取り組んでおり、コンテンツはファイルに保存されています。たとえば、ディレクトリに 2 つのファイルがchapter1.jadeあります。chapter2.jademodule1/

ディレクトリを読み取り、その中にすべてのファイルmodule1/を動的に含めたいと思います。chapterX.jade

私はやろうとしましたがdirectory = fs.readDirSync('module1/')、私の見解では:

each item in directory
  include item

しかし、jade インクルードは動的な値をサポートしていません (`include #{item} でさえも) 動作しません。これをどのように実装できるか考えていますか?

編集:ループの下にいくつかのコードを生成したいeach(簡単にリンクするためのアンカー)ので、ソリューションがビューにあることが望ましいです。含まれているファイルにアンカーを手動で追加することはもちろん可能ですが、理想的ではありません。

ありがとう

4

3 に答える 3

1

これを機能させるために私が行ったことの短いバージョンを次に示します。jade Public APIを使用します。

var directory = __dirname+'/views/bla/'
  , files
  , renderedHTML = '';

if( !fs.existsSync(directory) ) {
  // directory doesn't exist, in my case I want a 404
  return res.status(404).send('404 Not found');
}

// get files in the directory
files = fs.readdirSync(directory);

files.forEach(function(file) {
  var template = jade.compile(fs.readFileSync(directory+file, 'utf8'));

  // some templating
  renderedHTML += '<section><a id="'+file+'" name="'+file+'" class="anchor">&nbsp;</a>'+template()+'</section>';
});

// render the actual view and pass it the pre rendered views
res.render('view', { 
  title: 'View',
  files: files,
  html: renderedHTML
})

そして、ビューはエスケープされていない html 変数をレンダリングするだけです:

div(class="component-doc-wrap")
  !{html}
于 2013-05-24T20:33:16.430 に答える
0

kalemas の回答に加えて、jade に含まれるファイルにインクルードを書き込むこともできます。

この例では、インクルードを include_all.jade に書き込みます。このファイルは jade ファイルに含まれています。

うまくいかない場合は、パスを確認してください;-)

たとえば、app.jsで

var includes = "path/to/include1\n";
includes += "path/to/include2";
...
incPath = "path/to/include_all.jade";

fs.open(incPath,'w',function(err,fd){
if(err){
    throw 'error open file: ' + incPath +" "+ err;
}

var buffer = new Buffer(includes);
 fs.write(fd,buffer,0,buffer.length,null,function(err){
    if (err) 
        throw 'error writing file: ' +err;
    fs.close(fd,function(){
        console.log('file written ' + incPath);
    });
 });
});

あなたの翡翠ファイルに

include path/to/include_all.jade
于 2014-11-30T17:15:59.020 に答える