[英]Meteor Storing and Retrieving Custom Objects in Session
我創建了一個自定義購物車對象,並將其放在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。 我想念任何類型的演員嗎?
正如@Peppe LG提到的那樣,您只能在會話中存儲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.set('shoppingCart', cart.toJSON());
並還原:
ShoppingCart.fromJSON(Session.get('shoppingCart'));
我遇到了同樣的問題。 本質上,正在發生的流星會話(和集合)只能存儲EJSON類型,因此,您從Shopping Session中檢索到的ShoppingCart自定義類型是普通對象。
雖然您可以手動與EJSON進行相互轉換,但最終可能需要在許多不同的地方重復進行此操作。 如果您的ShoppingCart是另一個對象的成員,則還必須手動轉換該成員。 最好使用EJSON.addType告訴Meteor如何在您存儲或檢索該類型的對象的任何地方自動處理它。
這里有一個很棒的演示: https : //www.eventedmind.com/feed/meteor-create-a-custom-ejson-type 。 完整文檔也位於此處: http : //docs.meteor.com/#/full/ejson 。 但是這是一個簡短的版本:
在自定義類型中添加一個名為typeName的方法:
\n ShoppingCart.prototoype.typeName = function(){\n 返回“購物車”;\n };\n
添加另一個方法toJSONValue:
\n ShoppingCart.prototype.toJSONValue = function(){\n / *返回對象的JSON兼容版本* /\n };\n
最后,使用以下命令將自定義類型添加到EJSON:
\n EJSON.addType(“ ShoppingCart”,function fromJSONValue(value){\n / *從JSON對象“值”返回您自定義類型的對象* /\n };\n
注意:步驟1和3中的“類型名稱”必須完全匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.