1

findOne()からオブジェクトを返して使用する方法を理解するのに問題があります。

私のコードはこれです:

HTML:

<head>
  <title>count</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  {{showcount}}
</template>

Js:

var Database = new Meteor.Collection("counters");

if(Meteor.is_client) {
  Template.hello.showcount = function () {
    var c = Database.findOne();
    return c;
  };

}

if (Meteor.is_server) {
  Meteor.startup(function () {
    if(Database.find().count() === 0)
    {
        Database.insert({name: "counter", value: 0});
    }
  });
}

オブジェクトからデータにアクセスする方法があるかどうか疑問に思っています。{{showcount}}から{{showcount.name}}への変更はまったく機能していないようです。

4

2 に答える 2

3

Meteorを使い始めたとき、この同じ問題が何度か発生しました...

Meteorクライアントがサーバーに接続すると、コレクションの同期が完了する前にテンプレートがレンダリングされます。つまり、呼び出している時点でクライアントコレクションは空ですfindOne

これが実際に動作していることを確認するには、呼び出しのconsole.log(c)後に貼り付けてから、ページをリロードしてみてください。findOne2つのログエントリが表示されます。最初のページの読み込み時に1回、コレクションの同期が終了したときにもう一度。

これを修正するにはhello、コレクションが同期されていない可能性があるという事実を処理するようにテンプレートを更新するだけです。

{{#if showcount}}
    {{showcount.name}}
{{/if}}

上記の変更でコードをテストしましたが、機能します。

于 2012-08-30T03:07:02.630 に答える
1

これを行う適切な方法は、#withタグを使用することです。

<template name="hello">
{{#with showcount}}
    {{name}}
{{/with}}
</template>

#withタグの詳細については、以下のドキュメントを参照してください

https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md

于 2014-05-28T17:52:51.830 に答える