在Meteor中干掉模板代码?

时间:2014-06-12 18:03:38

标签: templates meteor

我在构建我的第一个Meteor项目时注意到重要的代码重复,并且我想知道是否有办法将其干掉。

我的数据库模型有商店,每个商店都有许多产品,还有一个当前库存量的字段。

var store_id = Store.insert({name: 'Store 1', max_items: 50});
var p1 = Product.insert({name: 'General', store_id: store_id, item_count: 20});
var p2 = Product.insert({name: 'Special', store_id: store_id, item_count: 10});

我有一个显示商店的模板,以及它有多少产品和商品的统计数据。

<template name="store">
  <div class="store">
    <b>{{name}}</b>
    <p>Current items: {{current_items}}</p>
    <p>Maximum # of items allowed in inventory: {{max_items}}</p>
    <p>% Full: {{percent_full}}%</p>
  </div>
</template>

计算当前项目的数量似乎相当简单,我拉出所有产品,总计项目数(使用d3),返回结果。

Template.store.current_items = function () {
  var store_id = this._id;
  var items = Product.find({store_id: store_id}).fetch();
  if ( items.length > 0 ) {
    var item_cnt = d3.sum(_.pluck(items, 'item_count'));
    return item_cnt;
  }
  else {
    return 'N/A';
  }
};

要计算一个百分比,比较允许的项目总数和当前项目,似乎我必须重复所有内容。有更好的方法吗?

Template.store.percent_full = function () {
  var store_id = this._id;
  var items = Product.find({store_id: store_id}).fetch();
  if ( items.length > 0 ) {
    var item_cnt = d3.sum(_.pluck(items, 'item_count'));
    return item_cnt / max_items * 100;
  }
  else {
    return 'N/A';
  }
};

1 个答案:

答案 0 :(得分:0)

将复制的逻辑提取到单独的函数,并从不同的帮助程序中适当地调用它。这与DRYing任何其他JS代码没有什么不同。