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 のルーム ドキュメントの name = 'Room1' を考えると、ページは 'Welcome to 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

注:findOne更新が発生したときに呼び出されるように、呼び出しを関数に移動しましたが、どこにあったとしても問題なかったかもしれません

于 2012-05-01T16:45:45.563 に答える
4

Coffeescript を使用しているので、存在演算子 '?' も機能します。

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