【问题标题】:Meteor method cannot read property "quantity" undefinedMeteor 方法无法读取属性“数量”未定义
【发布时间】: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


【解决方案1】:

当你调用方法时

Meteor.call("addToCart", (quantity, listingId, cartId), function(err, res){

你不应该在quantity, listingId, cartId 周围使用( )

Meteor.call("addToCart", quantity, listingId, cartId, function(err, res){

当您编写f(a, (b, c, d), e) 时,(b, c, d) 实际上是comma operator,它计算所有操作数,然后返回最后一个。所以这和f(a, d, e)是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2021-05-18
    • 2019-07-13
    • 2015-07-10
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多