【问题标题】:How to pass an array in hogan-express template engine如何在 hogan-express 模板引擎中传递数组
【发布时间】:2016-06-03 10:34:38
【问题描述】:

如何使用 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}} 位正在通过。

【问题讨论】:

    标签: node.js express hogan.js


    【解决方案1】:

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

    可以做的是遍历帖子:

    {{#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>
    

    【讨论】:

    • 哇,成功了!非常感谢。 JS 和 MEAN 堆栈的新手,所以卡在奇怪的地方。非常感谢您的帮助!
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多