【问题标题】:Meteor: Displaying Categories from a ListMeteor:显示列表中的类别
【发布时间】:2015-10-08 06:59:13
【问题描述】:

我是 Meteor JS 的新手,我认为这是一个简单的问题。

我有一个项目列表,每个项目都分配了一个类别。例如:

{Item: "Jump Rope", Category:  "Toys"},
{Item: "Apple",     Category:  "Food"},
{Item: "Pear",      Category:  "Food"}

等等

在侧边栏中,我想列出类别。我以为我已经找到了一种方法来做到这一点,但最终发生的是每个类别都列出了它的使用次数。

例如,在上面的示例中,Food 会列出两次,而 Toys 会列出一次。如果我要添加另一个食品类别项目(例如西红柿),那么食品将在侧边栏中列出 3 次。如果我要添加第二个玩具项目,那么玩具会被列出两次。

这不是我想要的。我想要的是每个类别都在侧边栏中列出一次,无论有多少项目。

关于如何做到这一点的任何想法?

谢谢。

【问题讨论】:

  • 请张贴您当前用于生成类别列表的代码?
  • 现在我正在使用 {{#each categories}} {{>category }} {{/each}}。这就是为什么我得到重复。

标签: meteor meteor-blaze


【解决方案1】:

您可以只fetch 这些项目,然后他们对结果执行pluckuniq。假设您有一个 Items 集合,其中包含看起来像 {item: String, category: String} 的文档,您可以使用以下帮助器:

Template.myTemplate.helpers({
  categories: function() {
    return _.uniq(_.pluck(Items.find().fetch(), 'category'));
  }
});

那么你的模板可能看起来像:

<template name="myTemplate">
  {{#each category in categories}}
    <div>{{category}}</div>
  {{/each}}
</template>

【讨论】:

  • +1 这是实现这一目标的正确方法。但是,我想知道下划线的规则是什么。我想如果你要使用两个或更多方法,你必须使用 _.chain 和 .val 方法......或者如果你要使用 _ 也没关系。接下来呢?
  • 在上面的代码中,我只是将pluck 的结果传递给uniq 的调用——那里没什么特别的。 Underscore 提供chain 作为此类情况的替代语法。也可以这样写:_.chain(Items.find().fetch()).pluck('category').uniq().value();.
  • 这很好——谢谢。不过,最后一个问题。如果某个项目的类别留空,那么在侧边栏中会列出一个“空白”类别(即占据一整行的空白区域)。知道如何删除它吗?
  • 没关系,我想通了。我修改代码如下: {{#each category in categories}} {{# if this }}
    {{category}}
    {{/if}} {{/each}}
  • 我建议将代码更改为类似于return _.uniq(_.compact(_.pluck(。使用_.compact 将删除所有虚假值,这将解决类别未定义的情况。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
相关资源
最近更新 更多