我在显示交易列表的页面上使用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
可以获取的实际用户文档替换payer
和Meteor.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_FirstName
和payer_FirstName
就像它们是集合的一部分一样。在上面的示例中,我使用了
Meteor.users
。确保以安全的方式发布所有用户的详细信息。默认情况下,我认为流星会隐藏除已登录用户之外的所有用户。因此,您可以将其解析为其他集合。在这种情况下,
payer
/ payee
记录与username
中的Meteor.users
匹配。因此,您可以提取收款人/付款人的详细信息,而不必将所有详细信息存储在Transactions
中。