2016-06-03 10 views
1

Wie übergebe ich ein Array wie die unten auf eine HTML-Seite mit Hogan-Express? Ich versuche es, aber es scheint nicht zu funktionieren.Wie übergeben Sie ein Array in Hogan-Express-Vorlage-Engine

Mein Code:

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'); 
      } 
     }) 
}) 

By the way, sieht die userPosts.posts wie unten:

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

myPosts.html Seite ist wie folgt:

<!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> 

By the way , das {{title}} Bit kommt durch.

Antwort

2

Kurz gesagt: Sie können nicht, zumindest nicht so.

Was Sie können Sie über den Pfosten laufen ist:

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

jedoch, dass würden Sie mit dem Problem des Textinhalts für jeden Link ("Post 1") verlassen. Um dies zu beheben, müssen Sie das Array serverseitig verarbeiten, bevor Sie es zum Rendern übergeben.

Zum Beispiel:

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

Und die Vorlage:

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

Das gerenderte HTML wird wie folgt aussehen:

<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> 
+0

Wow Mann, dass der Trick! Vielen Dank. Neu bei JS und dem MEAN Stack, also in seltsamen Orten stecken bleiben. Ich schätze die Hilfe sehr! –

Verwandte Themen