如何将可读对象流传递到Handlebars模板中

时间:2015-02-21 00:06:41

标签: node.js templates stream handlebars.js

例如,我正在使用npm' accountdown module,其list()方法列出了所有帐户。 list()返回一个可读的对象流,因此我当前的解决方案是从该流创建一个列表并将其传递给我的模板。

Handlebars是否有办法直接读取流,并避免将流作为列表读入内存,因此可以从我的Handlebars模板中读取它?

以下是我的情况示例:

我在我的帐户列表流results中构建了一个列表stream,因此我可以将其传递给我的模板account-list-template

var results = [];
var stream = server.accounts.list();

stream
  .on('data', function (data) {
    results.push(data);
  })
  .on('error', function (err) {
    return console.log(err);
  })
  .on('end', function () {
    var ctx = {accounts: results};
    return response().html(server.render('account-list-template', ctx)).pipe(res);
  });

我尝试使用handlebars-stream模块,但我无法将列表对象流传输到模板。我只能将模板传递给对象,如下所示:

return server.accounts.list().pipe(handlebars(server.render('account-list-template'))).pipe(res); // produces x times the template

但结果不正确,因为为流中的每个帐户呈现整个模板,为x个帐户呈现x个页面。

这是我的模板:

{{#extend "layout"}}

{{#replace "body"}}
<div class="container">
    <hr>
    <div class="sheet-list">
        <h1>Master account list:</h1>
        {{#each accounts}}
        <div class="list-item clearfix">
            <a href="/account/edit/{{ key }}">
                <div class="list-item-info">
                    {{ key }}
                    {{ value.email }}
                    <h3 class="list-item-name">{{ key }}</h3>
                    <div class="list-item-description">{{ value.email }}</div>

                </div>

                <div class="list-item-actions">
                    <form action="/account/delete/{{ key }}" method="post">
                        <button type="submit" class="destroy-sheet">
                            <i class="fa fa-trash-o"></i> destroy
                        </button>
                    </form>
                </div>
            </a>
        </div>
        {{/each }}
    </div>

</div>

{{/replace}}

{{/extend}}

0 个答案:

没有答案