向检索到的集合添加其他密钥

时间:2015-02-19 07:05:44

标签: meteor

我通过执行以下操作来检索产品。

 Template.Bag.helpers({
    bagged_products: function () {
      var bag = Session.get("shoppingBag") || {};
      var bagged_product_ids = Object.keys(bag);
      var bagged_products = Products.find({_id: {$in: bagged_product_ids}});
      return bagged_products;
    }
  })

字典bag{"product_id": quantity}的数组。在模板中,我还想显示每个产品的数量。例如,我会做

for each retrieved_product p:
  p.qty = qty
return updated_products

问题是bagged_productsLocalCollection.Cursor类型,我不知道如何为此添加属性,因此我可以在模板中执行以下操作。

        <div class="product-name">{{p_name}}</div>
        <div class="product-price">${{price}}</div>
        <div class="product-qty">{{my_added_qty}}</div>

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在帮助程序中使用转换:

var bag = Session.get("shoppingBag") || {}

var transform = function(product) {
    product.qty = bag[product._id] || 0;
    return product;
}

return Products.find({_id: {$in: bagged_product_ids}}, {transform: transform});

然后只需使用{{qty}}或您在使用{{my_added_qty}}

的#each块中命名的任何内容

答案 1 :(得分:0)

我在返回文件之前最终声明了一个新的本地收藏。

  Template.Bag.helpers({
    bagged_products: function () {
      var bag = Session.get("shoppingBag") || {};
      var tmpBag = new Mongo.Collection(null);
      for (var p_id in bag) {
        var p = Products.findOne({_id: p_id});
        p.qty = bag[p_id];
        tmpBag.insert(p);
      }
      return tmpBag.find();
    }
  })