[英]dust.js templates: How to render a section asynchronously?
我有這個小的灰塵模板:
<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列表中的第一篇文章時起作用。 但是我確實需要呈現整個列表。
好吧,事實證明我必須遍歷查詢行並逐段寫入每個塊。 我不知道是否有更好的方法可以做到這一點:
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();
});
});
}
}
您可以通過將項目放在{#。} {/。}塊中來呈現列表,如下所示:
<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>
有時我遇到一種情況,除非使用{#。} {/。}將模板包裝在其中,否則我無法訪問對象或數組的項目。
隱式進行迭代的正確方法是使用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();
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.