【问题标题】:Repeating Meteor template with a specific item in mongodb collection使用 mongodb 集合中的特定项目重复 Meteor 模板
【发布时间】:2015-11-16 07:29:12
【问题描述】:

我收藏了这件商品:

{
  "item1": ["foo", "bar", "baz"],
  "item2": ...
}

我做了一个辅助函数来为item1中的每个项目重复一个模板

Template.temp.helpers({
  items: function() {
    return Col.find({},{item1:1});
  }
});

这是模板

<template name="temp">
  {{#each items}}
    {{> anotherTemplate}}
  {{/each}}
</template>

但我得到一个空数组。为什么它不起作用?

【问题讨论】:

  • 您是否正确发布/订阅它?此外,它应该是 {{/each}} 而不是 {{/items} 但我猜你没有从代码中粘贴它
  • @Bennyz 第一个是错字,我还在使用自动发布
  • 我明白了,你的助手也在另一个模板上(我认为这也是一个错字?)你是否在 shell 中运行了查询以确保它是正确的?
  • 你的模板名在html里和js里不一样&lt;template name="temp"&gt;Template.test.helpers只是打错了?

标签: mongodb templates meteor meteor-blaze


【解决方案1】:

试试{{#each items.item1}}

因为,Col.find({},{item1:1}) 只是从结果中删除所有其他字段。

Limit Fields to Return from a Query

就像 SQL 中的SELECT item1 FROM table

如果您需要为 item1 中的每个项目重复您的模板,您需要明确应该使用哪个数组。

<template name="temp">
  {{#each items.item1}}
    {{> anotherTemplate}}
  {{/each}}
</template>

【讨论】:

  • 在您的情况下实际上没有 items 基本上 是一个对象数组,因此 items.item1 没有意义(并且未定义 - 因为 item1 未定义在数组)。如果集合中只有一个项目,然后将各种数组作为该对象的属性,那么在项目帮助器中使用 findOne(...) 而不是 find(...) 应该可以解决您的问题。否则,如果您有多个包含多个 item1、item2 数组的文档/对象,请参阅下面的答案。
【解决方案2】:

也许你想要:

{{#each items}}
    {{#each item1}}
        {{> anotherTemplate}}
    {{/each}}
{{/each}}

或者这个:

Template.temp.helpers({
  items: function() {
    return Col.find({},{item1:1}).map(function(item){
      return item.item1
    })
  }
});

这样 items 将返回 item1 数组。最初它返回一个只有一个元素的对象数组,即每个对象的 item1 数组:

[{
     item1: ["foo","bar","baz"]
 },
 {
     item1: ["lah","nah","jah"]
 },
 {
     item1: ["see","gee","bee"]
 }]

这样你会得到一个数组数组:[["foo","bar","baz"], ["lah","nah","jah"], ["see","gee","bee"]]

【讨论】:

  • @JobJot thanx,但我不确定它解决了什么,似乎不必要的复杂
  • 我想我只是确保您正在迭代数组元素,而不是包含数组 item1 的对象,我认为这可能是您的问题。正如您所描述的那样,您有一个包含包含属性 item1、item 2 的对象的集合,是吗?还是它只是集合中包含各种数组的一个对象?
【解决方案3】:

Meteor mongo 方法有点不同,你不能使用。

 return Col.find({},{item1:1});

你可以这样使用它:

 return Col.find({},{fields:{'item1':1}});

【讨论】:

    【解决方案4】:

    我认为你需要从帮助者那里返回类似的东西

    return Col.findOne({}).item1
    

    它现在应该可以工作了

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多