嵌套在每个内部(Express应用程序中的Handlebars模板)

时间:2014-12-31 09:33:23

标签: node.js express handlebars.js

今天早上,我想我终于通过拼凑一个快速的应用程序来看看Handlebars。到目前为止,我很喜欢它(我觉得我更喜欢Handlebars和Jade),但我有一个问题。我玩的应用程序是(又一个)使用Mongo的基本CMS。在/ posts / index页面上,我正在检查并显示帖子:

{{#if posts}}
  {{#each posts}}
    <h4>{{title}}
    <p>{{content}}</p>
  {{/each}}
{{else}}
  <p>There are no posts.</p>
{{/if}}

这很简单并按预期工作,但我当时想知道在每个帖子的底部添加类似编辑按钮的内容。我想根据用户调整此功能的可见性。如果已登录(我使用Passport的本地策略),我可以通过以下方式轻松查看用户的详细信息:

{{#if user}}
  {{user.name}}
{{/if}}

但问题是,如果用户检查 上面的每个,我似乎无法获得。在Handlebars中这可能吗?在Jade过去,我只是使用了类似的东西:

if(posts.length)
  each post in posts
    #{post.title}
    if(user)
      ...

为了清楚起见,帖子页面的 get 路线是:

router.get('/', function(req, res) {
  Post.find({}, function(err, posts) {
    res.render('posts/index', {
      title: 'Posts',
      user: req.user,
      posts: posts,
    });
  });
});

如上所述,我对Handlebars来说真的很新,所以我希望这是非常明显的事情。在此先感谢,我希望你们都有一个伟大的NYE!

1 个答案:

答案 0 :(得分:12)

  • 您不需要使用eachif作品包围each...else
  • 如果您尝试访问user中的each,您实际上将尝试访问posts.user。您可以使用../
  • 访问父上下文

E.g。

{{#each posts}}
  <h4>{{title}}
  <p>{{content}}</p>
  {{#if ../user}}
    {{../user.name}}
  {{/if}}
{{else}}
  <p>There are no posts.</p>
{{/each}}