【问题标题】:Multiple waitOn in iron-router not working铁路由器中的多个waitOn不起作用
【发布时间】:2014-06-25 00:52:36
【问题描述】:

我有一个订阅购物车出版物的全局 waitOn。

但是,我想在购物车页面上显示购物车中的商品列表,但购物车中有一个 line_items 对象数组,其中包含 listIds。

所以我还需要订阅购物车页面上的列表才能显示它们。

这是我目前所拥有的

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”。我认为这是因为它试图在购物车订阅之前订阅。

有什么办法解决这个问题?

【问题讨论】:

  • 您可能会发现this post 很有帮助。

标签: javascript jquery mongodb meteor


【解决方案1】:

您的 waitOn 函数假设 Carts.findOne(Session.get("cartId")) 总是返回一些东西。

最初,当 Meteor 加载您的数据时,您的数据还没有准备好,您需要考虑到这一点。您需要首先检查购物车是否存在。

var cart = Carts.findOne(Session.get("cartId"))

if(!cart) return false;

var line_items = cart.line_items;

虽然我不确定您使用 waitOn 处理程序的方式,因为返回值必须始终是订阅,您还需要处理如果上面的 Carts.findOne() 返回 null 并且如果 @987654324 @ 也是null

【讨论】:

  • 将其更改为 if(Session.get("cartId") && cart) 效果很好,谢谢!
猜你喜欢
  • 2014-10-09
  • 2016-05-14
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2016-01-22
相关资源
最近更新 更多