我在显示交易列表的页面上使用meteor。交易文件如下所示:

{ payer: 'username1', payee: 'username2', amount: 100, date: someDate }

要显示这样的交易清单:

<ul class="recent-transactions"> {{#each transactions}} <li>{{this.amount}} to {{this.payee}} from {{this.payer}}</li> {{/each}} </ul>

在助手中,或者恰好在呈现模板之前,我想用payee可以获取的实际用户文档替换payerMeteor.users.findOne({ username: someUsername})属性,以便模板看起来像这样:

<ul class="recent-transactions"> {{#each transactions}} <li>{{this.amount}} to {{this.payee.profile.FirstName}} from {{this.payer.profile.FirstName}}</li> {{/each}} </ul>

有没有办法做到这一点?

最佳答案

您还可以使用转换功能(请参见转换下的http://docs.meteor.com/#collections

Template.hello.transactions = function(){
    return Transactions.find({}, {transform: function(doc) {
        var payee = Meteor.users.findOne({username: doc.payee});
        var payer = Meteor.users.findOne({username: doc.payer});
        doc.payer_FirstName = payeer.profile.FirstName;
        doc.payee_FirstName = payee.profile.FirstName;

        return doc;
        }
    });
}


转换功能可以让您在返回文档之前对其进行更改,保留所有现有字段,并且现在添加payee_FirstNamepayer_FirstName就像它们是集合的一部分一样。

在上面的示例中,我使用了Meteor.users。确保以安全的方式发布所有用户的详细信息。默认情况下,我认为流星会隐藏除已登录用户之外的所有用户。

因此,您可以将其解析为其他集合。在这种情况下,payer / payee记录与username中的Meteor.users匹配。因此,您可以提取收款人/付款人的详细信息,而不必将所有详细信息存储在Transactions中。

09-17 02:08