我有一个名为Cart
的客户端本地集合,它包含产品对象。我想要做的是将模板中所有产品和数量的总和返回给模板。我这样做如下:
Template.layout.helpers({
cartTotal: () => {
if( !Cart.findOne({}) ) {
return 0;
}
else {
let productsCursor = Cart.find({});
let totalPrice = 0;
productsCursor.map((product) => {
let subtotal = product.qty*product.price;
totalPrice =+ subtotal;
console.log(totalPrice);
});
return totalPrice.toFixed(2);
}
}
});
当我将相同的产品添加到集合中时(将product.qty
增加1),一切都很好,但是当我将另一个对象添加到Cart
集合时,它开始求和只有这个对象的数量和价格。
如果我在浏览器控制台上检查Collection,那么所有对象都在那里,但cartTotal
方法的结果没有返回正确的值。
我已经尝试过使用Mongo.Cursor#forEach()
方法,但结果是一样的。我怎样才能实现我想做的事情?有什么不对?
答案 0 :(得分:0)
这可能与反应性有关。尝试直接映射光标,而不是将其保存为变量,如下所示:
Template.layout.helpers({
cartTotal: () => {
if( !Cart.findOne({}) ) {
return 0;
}
else {
let totalPrice = 0;
Cart.find({}).map((product) => {
let subtotal = product.qty*product.price;
totalPrice =+ subtotal;
console.log(totalPrice);
});
return totalPrice.toFixed(2);
}
}
});
答案 1 :(得分:0)
我不确切地知道这是关于minimongo还是babel的错误,但用totalPrice =+ subtotal;
代替totalPrice = totalPrice + subtotal;
工作。
答案 2 :(得分:0)
您的代码和答案代码之一都包含=+
。
毫不奇怪,您只获得一种产品的总价,因为您没有调整价格,而是在每次迭代中重写它:
// let total price be the subtotal with positive sign
totalPrice = +subtotal;
你的意思是+=
,这是不一样的。
我鼓励你尝试功能性方法:
Template.layout.helpers({
cartTotal() {
Cart.find()
.map(product => product.qty * product.price)
.reduce((prev, curr) => prev + curr, 0)
.toFixed(2);
}
});