为什么我收到 '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
}
})
我做了这个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
}
})