我有一个包含一系列交易的文档。我正在尝试使用正确的交易数据呈现收据模板。我只是将我的子文档移动到一个数组中,我需要转换这些帮助以反映更改,但我不知道该怎么做。
这是我的js文件片段。
Template.Gift.helpers({
displayReceipt: function () {
var transaction_guid = Session.get('transaction_guid');
var transaction_status = this.recurring.transactions[transaction_guid].status;
return (transaction_status === 'succeeded');
}
});
这是我的html文件片段。
<div class="Receipt">
{{#if displayReceipt}}
{{> Receipt}}
{{else}}
{{/if}}
</div>
如何更改此选项以从数组中提取正确的事务?
这是我的对象原来的样子。
"transactions": {
"TX1234": {
"guid": "TX1234",
"amount": 102,
"email_sent": false,
"status": "succeeded"
},
"TX1235": {
"guid": "TX1235",
"amount": 102,
"email_sent": true,
"status": "failed"
}
}
这是新的数组样式
transactions: [
{
"guid": "TX1234",
"amount": 102,
"email_sent": false,
"status": "succeeded"
},
{
"guid": "TX1235",
"amount": 102,
"email_sent": true,
"status": "failed"
}
]
答案 0 :(得分:2)
您访问的内容看起来不像Mongo(Minimongo)实例。看起来您已将transactions
直接拉入Javascript对象,这似乎无法使用Minimongo。
无论如何,如果交易在Minimongo中,这将是您使用的查询:
var item = SomeCollection.findOne({"transactions.guid": transaction_guid});
var transaction = _.findWhere(item.transactions, { guid: transaction_guid });
查询返回包含整个数组的文档,因为Meteor doesn't support MongoDB的$elemMatch
projection尚未完成。因此,您必须自己过滤正确的元素,如上所述。我在这个例子中使用了下划线的findWhere
函数。