Meteor:如何在选择下拉列表中显示集合中的不同字段值?

时间:2014-07-28 10:49:34

标签: meteor distinct

我正在建立一个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函数中返回值的类型有问题,但我不知道是什么。有人可以把我放在正确的道路上。

感谢。

2 个答案:

答案 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"));