如何在hogan-express模板引擎中传递数组

时间:2016-06-03 10:34:38

标签: node.js express hogan.js

如何使用hogan-express将如下所示的数组传递给HTML页面?我正在尝试,但它似乎没有起作用。

我的代码:

apiRouter.get('/myPosts', function(req, res, next){
    userModel.findOne({'profileID':req.session.facebookProfileId}, function(err, userPosts) {
            if(userPosts) {
                res.render('myPosts', {title:siteName + ': My Posts', posts:userPosts.posts});
            } else {
                console.log('You do not have any posts');
            }
        })
})

顺便说一下,userPosts.posts如下所示:

["123","124","125"]

myPosts.html页面如下:

<!doctype html>
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
    <p><a href="/posts?id={{posts[0].value}}">Post 1</a></p>
    <p><a href="/posts?id={{posts[1].value}}">Post 2</a></p>
</body>
</html>

顺便说一下,{{title}}位正在通过。

1 个答案:

答案 0 :(得分:2)

简而言之:你不能,至少不能那样。

可以做的是遍历帖子:

{{#posts}}
  <p><a href="/posts?id={{.}}">Post 1</a></p>
{{/posts}}

但是,这会让您遇到每个链接(“Post 1”)的文本内容问题。要解决这个问题,您需要先处理数组服务器端,然后再将其传递给呈现。

例如:

res.render('myPosts', {
  title : siteName + ': My Posts',
  posts : userPosts.posts.map(function(postId, idx) {
    return { postId : postId, postNum : 1 + idx };
  })
});

模板:

{{#posts}}
  <p><a href="/posts?id={{postId}}">Post {{postNum}}</a></p>
{{/posts}}

呈现的HTML将如下所示:

<p><a href="/posts?id=123">Post 1</a></p>
<p><a href="/posts?id=124">Post 2</a></p>
<p><a href="/posts?id=125">Post 3</a></p>