4

我想尝试 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

即使该文档确实存在,显然房间也是未定义的。

4

2 回答 2

11

在客户端数据库缓存有时间同步到服务器之前,它是未定义的。一旦客户端同步,模板应该再次呈现,但由于它第一次抛出错误,这不会发生(我最近被类似的问题弄糊涂了)。

试试这个(使用短路&&来测试房间是否存在):

if Meteor.is_client
    Template.room.room_name = ->
        room = Rooms.findOne({id:1})
        room && room.name

Note: I moved the findOne call into the function to make sure it gets called when updates happen, but it may have also been fine where you had it

于 2012-05-01T16:45:45.563 回答
4

Since you're using Coffeescript, the existence operator, '?', would also work:

Template.room.helpers
    room_name: -> Rooms.findOne(id: 1)?.name
于 2012-12-14T19:56:13.987 回答