2012-05-01 17 views
4

私は流星を試したがっているので、私は小さなマルチルームのアプリをcoffeescriptで開発していると述べました。 ハンドルバーを使用してhtmlページにfindOneの結果を渡す際に問題が発生しています。今初心者流星:テンプレートと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の部屋のドキュメントが名= 'ROOM1' を持っていることを、与えられたことは、私は、ページが 'ROOM1へようこそ' レンダリングを期待したいが、 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

は、あなたのトンを非常にダニーをありがとう帽子はそれを固定した。 – dfucci

+0

感謝 - 完璧なソリューション。戻ってきて、それは完璧に働いた。両方をアップした。 – Andy

4

を持っていたところ罰金となって、また仕事になります。

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