gpt4 book ai didi

javascript - Meteor 在 session 中存储和检索自定义对象

转载 作者:行者123 更新时间:2023-11-30 10:14:41 25 4
gpt4 key购买 nike

我创建了一个自定义购物车对象并将其放在 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 中的对象?看起来 Session.get() 返回的对象不知何故不被视为 ShoppingCart。我错过了任何类型转换吗?

最佳答案

作为@Peppe L-G提到过,你只能在 Session 中存储 EJSON。要存储您的自定义对象,您需要能够手动将其转换为 EJSON 或从 EJSON 转换。示例:

_.extend(ShoppingCart, {
fromJSON: function(json) {
var obj = new ShoppingCart();
obj.grandTotal = json.grandTotal;
obj.Items = json.Items;
return obj;
},
});

_.extend(ShoppingCart.prototype, {
toJSON: function() {
return {
grandTotal: this.grandTotal,
Items: this.Items,
};
},
});

然后就可以保存到Session中了:

Session.set('shoppingCart', cart.toJSON());

和恢复:

ShoppingCart.fromJSON(Session.get('shoppingCart'));

关于javascript - Meteor 在 session 中存储和检索自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com