【发布时间】:2014-06-26 21:48:53
【问题描述】:
运行此流星方法时出现错误“TypeError: Cannot read property 'quantity' of undefined”。
前端调用:
Template.listingPage.events({
"submit #add-to-cart": function(e,t){
e.preventDefault();
var quantity = parseInt($("#spinner-01").val());
var listingId = t.data._id;
if(!Session.get("cartId")){
var id = Carts.insert({ line_items: []});
Session.set("cartId", id);
}
var cartId = Session.get("cartId");
Meteor.call("addToCart", (quantity, listingId, cartId), function(err, res){
if(err){
toastr.error(err.reason, "Error");
} else{
toastr.success("Added to cart", "Success");
}
});
}
});
方法(在收藏夹中):
Meteor.methods({
addToCart: function(quantity, listingId, cartId){
var listing = Listings.findOne(listingId);
if(quantity > listing.quantity)
throw new Meteor.Error(422, 'You cannot add that many to your cart');
var lineItem = LineItems.find({ cartId: cartId, listingId: listingId });
if(lineItem){
//in cart
var cartQuantity = lineItem.quantity;
if ( (cartQuantity + quantity) > listing.quantity)
throw new Meteor.Error(422, 'You cannot add that many to your cart');
LineItems.update({ cartId: Session.get("cartId"), listingId: listingId}, { $inc: { quantity: quantity}});
toastr.success("Added to cart", "Success");
} else{
// not in cart
lineItem = {
cartId: cartId,
listingId: listingId,
quantity: quantity,
imageId: listing.imageObj._id
}
LineItems.insert(lineItem);
Carts.update(cartId, { $inc: { count: 1 }});
}
}
});
方法上的第 5 行导致错误,似乎列表未定义。为什么当我订阅了调用该方法的路由上的列表时会出现这种情况。我需要将其设为仅服务器方法吗?
【问题讨论】:
-
能否也发布订阅代码?
-
通过将所有内容放入一个对象并将其作为参数而不是 3 个参数传递来修复它
标签: javascript jquery mongodb meteor