从模板Meteor访问和迭代内部对象集合

时间:2015-06-08 15:42:01

标签: javascript meteor

我有一个问题,或者更可能是在Meteor上传递给模板的变量误入歧途。 我想做一些非常简单的事情;我收集了一些文章。每篇文章都有一个相应的内部Tags数组。

模板文章

<template name="articles">
    <div class="row">
        <div class="small-12 small-centered columns"> 
        {{#each articles}}
        {{> _article}}
        {{/each}}
        </div>
    </div>
</template>

partial _article

<template name="_article">
<div class="article-container small-12 columns">
    <div class="article-header small-12 columns">   
      <h1 class="left">Titre: {{title}}</h1>
      <button class="right delete">&times;</button>
    </div>
    <article class="overview small-12 columns">

          <h2>Categorie: {{nameCateg}}</h2>
          <h2>{{createdAt}}</h2>
          <p>{{content}}</p>
          </article>
          <div class="article-footer small-12 columns">
            <p>Tags: 
            {{#each tags}} // I want to do something like that...
            lbl: {{tag.label}}
            {{/each}}
            </p>
          </div>
      </div>
    </template>

使用Mongol检查一篇文章

{
"_id:" "c47cezerzerz",
"title": "titre,
"tags"[
{"id": "aurtht58",
"label": "tag1"},
{"id": "aurthfe8",
"label": "tag2"}
]
}

当我尝试使用标签上的#each进行迭代时,标签似乎引用整个标签集合,而不仅仅是内部标签列表。如何解决?

所以我可能会错过一些东西,比如这些变量的范围......实际上我真的不知道它们是如何工作的......

2 个答案:

答案 0 :(得分:1)

{{#each}}内的上下文是一个子上下文,主要关注当前正在迭代的文档 例如,使用以下文档:

{
  foo : [
    {
      bar : 1
    },
    {
      bar : 2
    }
  ]
}

您可以这样使用它:

{{#each foo}}
  <p>bar is : {{bar}} and also {{this.bar}}</p>
{{/each}}

因此,在您的情况下,直接引用字段({{label}},...)

查询首先在当前模板上下文中完成,然后在其帮助程序上完成,然后向上和向上执行全局帮助程序。 模板上下文是一个完整的主题,是SpaceBars documentation中的一个很好的起点。

答案 1 :(得分:1)

我认为在您访问tags级别之前,您会迭代游标。 (待确认)。如果添加collection.find()或使用fetch()获得数组(在您的情况下,您只是访问文档中的数组)并且规则正在更改,则使用collection.findOne()获取游标用于空格键迭代。

您需要使用{{this}}访问代码,并使用{{this.label}}

标记项目