簡體   English   中英

dust.js模板:如何異步呈現部分?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM