我想尝试Meteor,所以我说在coffeescript中开发一个小型的多房间聊天应用程序。 我有问题使用把手将findOne的结果传递给html页面。
if Meteor.is_client
room=Rooms.findOne({id:1})
Template.room({room_name:room.name})
在html页面中
<head>
<title>Chat!</title>
</head>
<body>
{{> room}}
</body>
<template name="room">
Welcome to {{room_name}}
</template>
现在,鉴于id = 1的会议室文档名称='Room1',我希望该页面呈现'欢迎来到Room1',但得到一个白页,控制台显示2个错误:
Uncaught TypeError: Cannot read property 'name' of undefined
Uncaught TypeError: Cannot read property 'room_name' of undefined
显然房间未定义,即使该文件确实存在。
答案 0 :(得分:11)
在客户端数据库缓存有时间同步到服务器之前,它在一瞬间未定义。一旦客户端同步,模板应该再次渲染,但是因为它在第一次不会发生时抛出错误(我最近对类似的问题感到困惑)。
尝试此操作(使用短路&&
来测试该房间是否存在):
if Meteor.is_client
Template.room.room_name = ->
room = Rooms.findOne({id:1})
room && room.name
注意:我将findOne
调用移动到函数中以确保在更新发生时调用它,但是在你拥有它的时候也可能没问题
答案 1 :(得分:4)
由于你正在使用Coffeescript,存在运算符'?'也可以工作:
Template.room.helpers
room_name: -> Rooms.findOne(id: 1)?.name