为什么我收到 'undefined' 错误,但代码在我的 Meteor 模板中正常工作?

Why am I getting an 'undefined' error but the code is working in my Meteor template?

我做了这个UI.registerHelper:

UI.registerHelper('addressCityName', function(id) {
    "use strict";
        return Cities.findOne({_id: id }).name
}) 

这允许我访问我的地址集合中链接的 city id 的 name 属性。

它在浏览器中有效,但在控制台中我收到一条错误消息:Exception in template helper: TypeError: Cannot read property 'name' of undefined

如果我从 UI.registerHelper return 值中删除 name 属性,错误就会消失,但浏览器不再显示城市名称。

这是怎么回事,我该如何解决?

当您尝试使用 Cities.findOne({_id: id }).name 获取名称时。但是您的订阅在客户端还没有准备好。所以 Cities.findOne({_id: id }) 的输出是未定义的。

因此,如果您尝试获得 Cities.findOne({_id: id }).name,那么如果您可视化,您的输出将类似于 undefined.name。所以这就是您收到错误的原因。

要解决问题,您可以添加一个 if 条件,它会解决问题。

UI.registerHelper('addressCityName', function(id) {
    "use strict";
        if(Cities.findOne({_id: id })) {
            return Cities.findOne({_id: id }).name
        }
})