我在模板助手中遇到了一个奇怪的错误,我希望有人可以和我一起关注它。基本上我在客户端控制台中得到的错误是getArena()。height未定义。但是,console.log(getArena()。height)返回正确的属性值。这似乎是一个时间问题导致我得到错误,但我的应用程序实际上正在工作。我该怎么做才能缓解此控制台错误?
//My template helper function
yGrids: function() {
console.log(getArena);
console.log(getArena().height);
var yArray = [];
for (var i=0;i<(getArena().height);i++){
yArray.push({});
}
return yArray;
},
// The console results
function getArena() { // 50
return Arenas.findOne(Session.get('arena_id')); …
Exception in template helper: TypeError: Cannot read property 'height' of undefined
at Object.yGrids (http://localhost:3000/app/app.js?hash=c17abf51d6af6541e868fa3fd0b26e34eea2df28:94:35)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2994:16
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1653:16
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3046:66
at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3045:27
at Object.Spacebars.call (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:172:18)
at http://localhost:3000/app/app.js?hash=c17abf51d6af6541e868fa3fd0b26e34eea2df28:24:22
at .<anonymous> (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2754:17)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1875:20
function getArena() { // 50
return Arenas.findOne(Session.get('arena_id')); …
2
答案 0 :(得分:1)
当引用可能尚未通过订阅加载的集合时,这是Meteor助手中的一个非常常见的问题。通常,您希望在订阅准备好之前显示加载模板而不是实际布局。或者(不那么优雅)你可以用以下方式为自己辩护:
var arena = getArena();
var height = arena && arena.height;
答案 1 :(得分:0)
无论getArena()返回什么,你都应该通过设置反应变量将它存储在反应变量中,你可以通过get()方法访问辅助变量中的反应变量