如何在Meteor Template Helpers之间传递数据?

时间:2016-02-09 07:05:42

标签: javascript meteor spacebars

流星新手在这里!

我有一个显示所有未结订单的页面。订单详细信息存储在集合中。模板助手将返回订单详细信息。

Template.delivery.helpers({
  openOrders: function(){
   return Orders.find({status: "open"});
  }
});

模板看起来像这样。

{{#if openOrders}}
  {{#each openOrders}}
     Date: {{createdAt}}
     Total items: {{items.length}}
     Location: {{location}} //It prints the location _id
  {{/each}}
{{/if}}

订单收藏只包含该位置的_id。位置详细信息存储在名为位置的集合中。

我想显示位置名称(存储在Location集合中)而不是_id。

我创建了一个模板帮助器,它返回了位置详细信息,但是如何将这些链接链接到帮助程序,以便显示Location name而不是Location _id

2 个答案:

答案 0 :(得分:0)

当您以关系数据库方式使用mongodb时,您需要安装publish-composite包以确保订阅所有必需的数据。

答案 1 :(得分:0)

当您使用each时,它会将this设置为正在迭代的当前事物。这将允许您在助手中使用this来执行查找。所以在这种情况下,如果您使用帮助程序来获取订单:

orders: function () {
  return Orders.find({ status: "orders" });
}

然后当您使用{{#each}}进行迭代时,this设置为当前顺序,这意味着您的位置帮助程序如下所示:

location: function () {
  return Locations.findOne(this.locationId);
}

将所有内容放在模板中就像是:

{{#if Template.subscriptionsReady}}
  {{#each orders}}
    <h1 class="title">Order #{{_id}}</h1>
    {{#with location}}
      <div class="location">
        <span>Latitude: {{ latitude }}</span>
      </div>
    {{/with}}
  {{/each}}
{{/if}}

请注意:只有在您发布地点时才会有效