2012-05-01 75 views
4

我想嘗試流星,所以我說開發一個小型多房間聊天應用程序在咖啡腳本。 我有問題將findOne的結果傳遞給使用把手的html頁面。初學者流星:模板和findOne

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具有NAME =「房間1」,我期望的頁面渲染「歡迎來到會議室1」,但有一個whitepage和控制檯顯示2個錯誤:

Uncaught TypeError: Cannot read property 'name' of undefined 
Uncaught TypeError: Cannot read property 'room_name' of undefined 

顯然室是即使該文件確實存在不確定。

回答

11

在客戶端數據庫緩存有時間同步到服務器之前,它在一秒內未定義。一旦客戶端同步,該模板應該再次呈現,但是由於它在第一次不會發生時拋出一個錯誤(最近我被類似的問題困惑)。

嘗試這種(使用短路&&來測試房間存在):

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

注:我搬到了findOne調用到函數,以確保當更新發生它被調用,但它可能有「?」也被罰款,你由於您使用的CoffeeScript,存在運營商,有它

+1

非常感謝丹尼,T帽子固定它。 – dfucci

+0

謝謝 - 完美的解決方案。兩者都返回並完美運作。 Upvoted兩個。 – Andy

4

,也將工作:

Template.room.helpers 
    room_name: -> Rooms.findOne(id: 1)?.name