我有这个小尘埃模板:
<div id="post-list">
<h1>Posts</h1>
{#posts}
<h4><a href="{url}">{title}</a></h4>
<p>by {author} on {date}</p>
<p>{content}</p>
{/posts}
</div>
我试图在渲染时从postgresql数据库中异步获取帖子:
var data = {posts:
function(chunk, context, bodies) {
return chunk.map(function(chunk) {
client.query("select * from blogposts", function (err, resultPosts) {
if (err) throw err;
return chunk.render(bodies.block, context.push(resultPosts.rows)).end();
});
});
}
}
不幸的是,这不起作用。模板呈现的唯一内容是by on
。
我该如何解决这个问题?感谢。
编辑:将chunk.render行设置为:
return chunk.render(bodies.block, context.push(resultPosts.rows[0])).end();
用于向我展示resultPosts列表中的第一篇文章。但我真的需要渲染整个列表。
答案 0 :(得分:0)
事实证明,我必须循环查询行并逐段编写每个块。我不知道有没有更好的方法来做到这一点:
var data = {posts:
function(chunk, context, bodies) {
return chunk.map(function(chunk) {
client.query("select * from blogposts", function (err, resultPosts) {
if (err) throw err;
for (index=0; index<resultPosts.rows.length; index++) {
chunk.render(bodies.block, context.push(resultPosts.rows[index]));
};
return chunk.end();
});
});
}
}
答案 1 :(得分:0)
您可以通过将项目放在{#。} {/。}块中来呈现列表,如下所示:
<div id="post-list">
<h1>Posts</h1>
{#posts}
{#.}
<h4><a href="{url}">{title}</a></h4>
<p>by {author} on {date}</p>
<p>{content}</p>
{/.}
{/posts}
</div>
有时我会遇到无法访问对象或数组项目的情况,除非我用{#。} {/。}包装模板。
答案 2 :(得分:0)
隐式执行迭代的正确方法是使用chunk.section
而不是chunk.render
。然后你可以自己跳过迭代。
return chunk.map(function(chunk) {
client.query("select * from blogposts", function(err, resultPosts) {
if (err) throw err;
return chunk.section(resultPosts.rows, context, bodies).end();
});
});