【发布时间】:2015-09-14 04:50:53
【问题描述】:
我创建了一个自定义购物车对象并将其放入lib 文件夹中。
ShoppingCart = function ShoppingCart() {
this.Items = new Array();
this.grandTotal = 0.00;
}
ShoppingCart.prototype.addItem = function(Item){
this.Items.push(Item);
this.Items.sort();
this.calculateTotal();
}
我在页面created阶段初始化了购物车并将其存储为Session.set('shoppingCart')。
Template.loginStatus.created = function() {
Session.set('loginShown',false);
if(!Session.get('shoppingCart')){ //set default if session shopping cart not exist
var cart = new ShoppingCart();
Session.setDefault('shoppingCart',cart);
}
那么当用户点击添加商品到购物车时,就会触发这个逻辑:
var cart = Session.get('shoppingCart');
cart.addItem(item);
Session.set('shoppingCart',cart);
不知何故,它不起作用。当我查看 chrome 控制台广告时,它显示undefined is not a function,指向cart.addItem(item) 行。如果我把它改成这个,它会起作用,但当然,因为每次创建新的购物车,我都无法在购物车中累积物品。
var cart = new ShoppingCart();
cart.addItem(item);
Session.set('shoppingCart',cart);
我应该如何正确存储和检索会话中的对象?看起来从 Session.get() 返回的对象不知何故不被视为 ShoppingCart。我错过了任何类型转换吗?
【问题讨论】:
-
Session 只能存储支持 EJSON 的对象。您的
ShoppingCart不支持 EJSON。我不知道这个问题的最佳解决方案,所以我把它留给另一个人。 -
@PeppeL-G 是否可以将其类型转换回
ShoppingCart。在 ASP.NET 中可以这样做,那么 Javascript 怎么样?
标签: javascript jquery meteor