0

我正在开发一个小型文档网站,内容存储在文件中。例如,我有两个文件chapter1.jadechapter2.jade一个module1/目录。

我想阅读module1/目录并动态包含其中的所有chapterX.jade文件。

我试图做directory = fs.readDirSync('module1/'),然后在我看来:

each item in directory
  include item

但是jade include 不支持动态值(甚至`include #{item})都不起作用。你知道我该如何实现吗?

编辑:我想在each循环下生成一些代码(便于链接的锚点),因此解决方案最好在视图中。我显然可以在包含的文件中手动添加锚点,但这并不理想。

谢谢

4

3 回答 3

1

这是我为使其工作所做的工作的简短版本。它使用玉公共 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

正如@user1737909 所说,仅使用玉石是不可能的。

做到这一点(tho)的最好方法是构建一个小的Express Dynamic (view) Helpers

在 Express 3.XX 中删除

检查这些: Jade - 添加动态包含的方式

于 2013-05-24T09:01:17.730 回答
0

除了 kalemas 答案之外,您还可以将您的包含写入包含在玉中的文件中。

在此示例中,我将包含内容写入 include_all.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 回答