2

我有这个代码:

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 } 就像你说的那样成功了。

4

2 回答 2

2

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

于 2013-01-07T14:59:15.747 回答
0

您可能必须等到数据到达,所以您可以尝试添加

if obj
    return obj.lap_n
else
    return {
        lap_n: 0
    }
于 2013-01-07T13:46:08.503 回答