如何循环遍历Meteor中的嵌入式文档
我在MongoDB集合“Author”中有一个嵌入式文档: 我想访问图书数据,循环浏览并在表格中显示每本书。 这就是我的JS文件的样子如何循环遍历Meteor中的嵌入式文档,meteor,Meteor,我在MongoDB集合“Author”中有一个嵌入式文档: 我想访问图书数据,循环浏览并在表格中显示每本书。 这就是我的JS文件的样子 Template.Author.helpers({ author: function() { //_id of the Author is passed via the URL return Author.find({"_id": FlowRouter.getParam('_id')}) } }); 这是我报告的H
Template.Author.helpers({
author: function() {
//_id of the Author is passed via the URL
return Author.find({"_id": FlowRouter.getParam('_id')})
}
});
这是我报告的HTML
<template name="Author">
<body>
<div class="row">
<div class="col-md-2">
Book Name
</div>
<div class="col-md-2">
Year
</div>
</div>
{{#each author}}
{{> bookdetails}}
{{/each}}
</body>
</template>
<template name="bookdetails">
<div class="row">
<div class="col-md-2">
{{Books.BName}}
</div>
<div class="col-md-2">
{{Books.Year}}
</div>
</div>
</template>
书名
年
{{{每位作者}
{{>bookdetails}
{{/每个}}
{{Books.BName}
{{Books.Year}
当我在嵌入的Books文档中只有一条记录时,这种方法是有效的,但当我有多条记录时,这种方法是无效的,因为“Books.BName”在这一点上是不明确的
我需要循环浏览“书籍”并输出每个名称和年份。答案是我发现的最接近于这样做的答案,但我得到了错误:
TypeError:\ u0.value不是函数
这可能是因为我有一个嵌入的文档,而不是数组。您的命名令人困惑。您有一个返回作者的
Book
助手,这就是您要传递给bookdetails
模板的内容。您应该将助手重命名为author
,以减少混淆。然后您可以使用{{{each author.books}}
遍历实际的书籍数组
此外,在
bookdetails
模板中,直接访问图书参数,例如{{BName}
而不是{{Books.BName}
谢谢@hubert og。关于命名的观点很好——我在问题中修改了这一点{{{每个author.Books}
是我一直在寻找的方向,但是做了那个改变并改成{{BName}
(这在你遍历author.Books之后是有意义的)对我不起作用(不返回任何数据)。我没有注意到你也在做author.find
。将其与其他调整一起更改为Author.findOne
。谢谢,这很有效!然而,当一个特定作者只有一本书时,它就失败了(与之相反,当它工作时不止一本书)。我得到以下错误:{{{#each}}当前只接受数组、游标或假值。
这可能是因为在这种情况下,您没有遵循相同的模式,而是将单个书本作为对象而不是包含单个对象的数组传递。最好只保留一个模式。太好了,非常感谢!现在可以了。我花了很多天的时间试图把这件事做好——非常感谢你的帮助和耐心!
<template name="Author">
<body>
<div class="row">
<div class="col-md-2">
Book Name
</div>
<div class="col-md-2">
Year
</div>
</div>
{{#each author}}
{{> bookdetails}}
{{/each}}
</body>
</template>
<template name="bookdetails">
<div class="row">
<div class="col-md-2">
{{Books.BName}}
</div>
<div class="col-md-2">
{{Books.Year}}
</div>
</div>
</template>