我正在建立一个Meteor应用程序,我有一个产品集合。该集合中的每个文档都有两个字段:productName和productCategory。在我的应用程序中,我想显示给定类别的所有产品。所以我有一个选择字段,我想选择一个类别。按下搜索按钮后,我想显示包含给定类别的所有产品的列表。
在我的模板中,我有以下代码来创建选择字段
<select>
{{#each distinct_products}}
<option>{{productCategory}}</option>
{{/each}}
<select>
在我的js文件中,distinct_product的定义如下:
Template.templatename.distinct_products = function() {
var distinctEntries = _.uniq(Meteor.products.find({}, {sort: {productCategory:1}, fields: {productCategory:true}}).fetch().map(function(x) {
return x.productCategory;
}), true);
return distinctEntries;
};
我在以下主题中找到了此解决方案:Meteor: how to search for only distinct field values aka a collection.distinct("fieldname") similar to Mongo's
但是,我的选择字段显示的选项数等于唯一商品类别的数量,但它是空值(无文本)。因此,我的选择字段有许多空选项,并且不显示任何产品类别。
我认为我的JS函数中返回值的类型有问题,但我不知道是什么。有人可以把我放在正确的道路上。
感谢。
答案 0 :(得分:2)
您的_.uniq
数据块会返回一系列productCategory
个属性,这是您的{{#each}
块正在迭代的内容 - 所以您不应该指定{{productCategory}}
再次在你的模板中。
改变这个:
<option>{{productCategory}}</option>
为:
<option>{{this}}</option>
它应该有效。通过尝试在循环中访问{{productCategory}}
,您实际上要求product.productCategory.productCategory
,这将是空的;您的帮助者已经返回product.productCategory
。
作为旁注,_.pluck
被设计为您使用_.map
的更简洁版本,因此可能值得一试。
答案 1 :(得分:0)
我能够缩短它
var wow = _.uniq(_.pluck(Nodes.find().fetch(),"productCategory"));