【问题标题】:Uncaught TypeError in MeteorMeteor 中未捕获的类型错误
【发布时间】:2013-01-07 12:18:32
【问题描述】:

我有这个代码:

Meteor.subscribe('practices');

Session.set('practice', 'Practice 1');

Template.laps_t.laps = function () {
  var obj = Practices.findOne({name: Session.get('practice')});
  return obj.lap_n;
};

我收到一个错误:Uncaught TypeError: Cannot read property 'lap_n' of undefined

我知道lap_n 实际上是obj 的属性。

我没有使用自动订阅。有什么想法吗?

编辑:

已解决。谢谢大家。

if(obj){ return obj.lap_n } 就像你说的那样成功了。

【问题讨论】:

  • lap_n 不是obj 的属性,如果您遇到该错误,因为objundefined

标签: javascript node.js mongodb undefined meteor


【解决方案1】:

您应该始终检查模板中是否存在对象。这样做的方式是,模板将在页面加载时立即执行,甚至可能在订阅从服务器检索到 mongo 数据之前,因此在这种情况下,您的 obj 将是未定义的,并且不会具有您期望的属性。但由于模板是反应式的,一旦数据可用,您的Practices.findOne 调用将被重新评估并重新执行模板。然后它就会起作用。

【讨论】:

  • 好的,谢谢。我明白。但在这种情况下,我如何从模板内部访问我的lap_n?在将其发送到模板之前,我必须反转 lap_n,这才是真正的问题..
  • 就像@crapthings说的,只要先用if (obj)检查对象是否存在,然后你就可以访问任何你想要的属性了。
  • 这样做,它将返回 false 并且模板什么也不做。我已经试过了;
  • if (obj) { return obj.lap_n; } else { return "0"; } 应该可以,对吧?
  • 我的问题是我需要反转 lap_n (这是一个列表)。是否有反向 {{#each }} 或类似的东西?
【解决方案2】:

您可能需要等到数据到达,所以您可以尝试添加

if obj
    return obj.lap_n
else
    return {
        lap_n: 0
    }

【讨论】:

  • 这样做,它将返回 false 并且模板什么也不做。我已经试过了;
  • 使用该代码,您无需等待。它只是评估条件并每次都将 0 分配给 lap_0。
  • 我的问题是我需要反转 lap_n (这是一个列表)。是否有反向 {{#each }} 或类似的东西?
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2012-12-29
  • 2014-12-07
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多