【问题标题】:Meteor - templates. Building simple catalogue流星 - 模板。构建简单目录
【发布时间】:2015-08-09 22:07:28
【问题描述】:

我是流星新手,所以请不要因为愚蠢的问题而责备我太多!我相当想在 Google 和 Meteor.docs 中找到答案,但我现在的愚蠢比我强。

我正在尝试从两个集合中构建简单的产品目录。

Catalogs = new Mongo.collection('catalogs');
Products = new Mongo.collection('products');

我的目标 - 是实现这样的视图:

Vegetables     <-- #1 catalog
  *Tomato      <-- product from #1 catalog
  *Cucumber    <-- another product from #1 ctalog
Fruits         <-- #2 catalog
  *Apple
  *Pineapple
  *Banana

我对创建目录和使用父 ID 向其中添加产品没有任何问题。但现在我被 Meteor 模板困住了,不知道如何展示嵌套在其父目录中的产品。 有时我对 Laravel 做类似的事情,在这种情况下,我会像这样使用 Laravel 的 Blade 检查每个产品:

{{$catalog->name}}
    @foreach ($products as $product)
       @if ($catalog->id == $product->parentId)
         {{$product->name}}
       @endif
    @endforeach

我同意,也许这不是优雅的解决方案,但它对我有用。 但是在 Meteor 中,随着“数据上下文”的变化(如果我理解他们的角色正确的话),如果我无法获得父或子属性,我无法掌握如何做这件事。我相信它必须有清晰直接的解决方法,但我自己看不到:(

拜托,你能帮我解决这个问题吗?

【问题讨论】:

    标签: meteor spacebars


    【解决方案1】:

    假设每个目录都有一个name,每个产品都有一个name 和一个catalogId,下面是一个将所有目录和产品显示为一系列列表的模板:

    <template name='catalogProducts'>
      {{#each catalogs}}
        <div class='catalog-name'>{{name}}</div>
        <ul>
          {{#each products}}
            <li>{{name}}</li>
          {{/each}}
        </ul>
      {{/each}}
    </template>
    
    Template.catalogProducts.helpers({
      catalogs: function() {
        // find all of the catalogs
        return Catalogs.find();
      },
      products: function() {
        // here the context is a catalog, so this._id is the id
        // of the current catalog - this finds all of its products
        return Products.find({catalogId: this._id});
      }
    });
    

    推荐阅读:A Guide to Meteor Templates & Data Contexts

    【讨论】:

    • 非常感谢大卫!非常有用的链接。答应你,我不会再犯这么愚蠢的错误了:)
    • 这是学习过程的一部分。 :) 我很高兴这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多