上記の答えは少し理解しにくいと思いました-それらはグローバルをリークし、単一の文字変数を持ち、いくつかの奇妙な名前が付けられています。だからここに私自身の答えがあります、私の(そしてあなたの)参考のために:
'hbs'を使用した動的パーシャル、express.jsのデフォルトのハンドルバーの実装:
私はこれを使用して、動的な部分を作成する単純なブログを作成(article-name).md
しました。/blog/(article-name)
// Create handlebars partials for each blog item
fs.readdirSync('blog').forEach(function(blogItem){
var slug = blogItem.replace('.md','')
var fileContents = fs.readFileSync('blog/'+blogItem, 'utf8')
var html = marked(fileContents)
var compiledTemplate = hbs.compile(html);
hbs.registerPartial(slug, compiledTemplate);
})
// Create 'showBlogItem' helper that acts as a dynamic partial
hbs.registerHelper('showBlogItem', function(slug, context, opts) {
var loadedPartial = hbs.handlebars.partials[slug];
return new hbs.handlebars.SafeString(loadedPartial(context));
});
これがルートです。ブログが存在しないため、パーシャルが存在しない場合は404sになります。
router.get('/blog/:slug', function(req, res){
var slug = req.param("slug")
var loadedPartial = hbs.handlebars.partials[slug];
if ( ! loadedPartial ) {
return res.status(404).json({ error: 'Article not found' })
}
res.render('blog', {
slug: slug
});
})
/views/blog.hbs
次のようになります:
<div class="blog">
{{ showBlogItem slug }}
</div>