0

私はMeteorを初めて使用するので、初心者の質問をお詫びします。私はCoffeeScriptを使用していることに注意してください。

次のように、サーバーとクライアントの「ifs」の上に新しいコレクションを作成します。

Trivia = new Meteor.Collection("trivia")

起動時に、ifMeteor.isServerの下のコレクションにいくつかのドキュメントを挿入します。ここでの1つの例:

Meteor.startup () ->
        Trivia.remove({})
        Trivia.insert({question: "Who Played Ethan Hunt in Mission Impossible?", choices: ["Tom Cruise", "Matt Damon", "Liam Neeson", "Edward Norton"], answer: "Tom Cruise", used: false})

HTMLページには、{{ask}}が含まれる「雑学クイズ」テンプレートがあります。

<body>
  {{> trivia}}
</body>

<template name="trivia">
  <p class="label label-info">Movie Trivia:</p>
  <h3>{{ask}}</h3>
</template>

これが.isClient内の私のコードです

if Meteor.isClient
    Template.trivia.ask = () ->
        Trivia.findOne({used: false})

そのまま、HTMLのh3タグ内に[objectObject]を戻します。

質問のテキストを取り戻そうとしていますが、次のコードを使用すると空白のページが表示されます。

Template.trivia.ask = () ->
    Trivia.findOne({used: false}).question

コンソール内でTrivia.findOne({used:false})。questionを実行すると、探していたものが表示されます。つまり、「ミッションインポッシブルでイーサンハントをプレイしたのは誰ですか?」です。

4

1 に答える 1

0

答えはトム・クルーズです!ジョーク

クエリは、ドキュメントを含むオブジェクトを返します。

{
  question: "Who Played Ethan Hunt in Mission Impossible?", 
  choices: ["Tom Cruise", "Matt Damon", "Liam Neeson", "Edward Norton"], 
  answer: "Tom Cruise", 
  used: false
} 

したがって、上記はハンドルバーに与えられるものですが、質問が必要なので、次を使用する必要があります。

<h3>{{ask.question}}</h3>

使用時の白紙についてTrivia.findOne({used: false}).question。これは、meteorが最初にブラウザにロードされたとき、ローカルコレクションがサーバーからフェッチされるまで空であるためです。したがって、ある時点で、非常に短い時間、クエリは何も返さないので、結果がない場合にケースを処理する必要がfindOne({used:false})あります。例外が発生すると、ページは空白になります。

于 2013-02-23T21:43:08.020 に答える