#javascript #jquery #mongodb #meteor
#javascript #jquery #mongodb #метеор
Вопрос:
У меня есть глобальное ожидание, которое относится к публикации корзины.
Однако на странице корзины я хочу показать список товаров в корзине, в корзине есть массив объектов line_items с идентификаторами списка.
Поэтому мне также нужно подписаться на объявления на странице корзины, чтобы показать их.
Вот что у меня есть до сих пор
Router.configure({
layoutTemplate: "layout",
loadingTemplate: "loading",
waitOn: function(){
if(Session.get("cartId"))
return Meteor.subscribe("cart", Session.get("cartId"));
}
});
Маршрут корзины
this.route("cart", {
path: "/cart",
waitOn: function(){
if(Session.get("cartId")){
var line_items = Carts.findOne(Session.get("cartId")).line_items;
var ids = [];
for(var i = 0; i < line_items.length; i ){
ids.push(line_items[i].listingId);
}
return Meteor.subscribe("cartItems", ids);
}
}
});
Я получаю сообщение об ошибке Не удается прочитать свойство ‘line_items’ из undefined. Я думаю, это происходит потому, что он пытается подписаться до подписки на корзину.
Есть способ это исправить?
Комментарии:
1. Вы можете найти этот пост полезным.
Ответ №1:
Ваша функция ожидания предполагает, что Carts.findOne(Session.get("cartId"))
всегда что-то возвращает.
Изначально, когда Meteor загружает ваши данные, они не будут готовы, и вам нужно это учитывать. Вам нужно сначала проверить, существует ли корзина.
var cart = Carts.findOne(Session.get("cartId"))
if(!cart) return false;
var line_items = cart.line_items;
Хотя я не уверен в том, как вы используете обработчики ожидания, поскольку возвращаемым значением всегда должна быть подписка, вам также нужно будет разобраться с тем, что делать, если приведенное выше Carts.findOne()
значение возвращает null и if Session.get("cartId")
null
тоже.
Комментарии:
1. Изменение его на if(Session.get(«cartId») amp;amp; cart) сработало отлично, спасибо!