我在构建我的第一个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';
}
};
答案 0 :(得分:0)
将复制的逻辑提取到单独的函数,并从不同的帮助程序中适当地调用它。这与DRYing任何其他JS代码没有什么不同。