2

次の非常に単純な Meteor アプリがあります。

tags.html で

<body>
  {{> tags}}
</body>

<template name="tags">
  <input type="button" id="submit" value="Change tag" />
  {{tags}}
</template>

...そしてtags.jsで

var tags = 1;

if (Meteor.isClient) {
    Template.tags.tags = function() {
        return tags;
    };

    Template.tags.events({
        'click #submit': function() {
            console.log("You pressed the button");
            tags += 1;
        }
    });
}

アプリを起動すると、ボタンとそのすぐ横に var タグの初期値 (1) が表示されます。これは正しいです。次に、ボタンをクリックすると、タグの値が増加します (コンソールで確認できます) が、テンプレートは再レンダリングされません。これは正常な動作ですか?私は何を期待すべきかわかりません.ライブテンプレートがいつ再レンダリングされるかを正確に教えてくれるドキュメントは見つかりませんでした.

ただし、Session オブジェクトを使用するように変数を変更すると、次のようになります。

tags.html で

<body>
  {{> tags}}
</body>

<template name="tags">
  <input type="button" id="submit" value="Change tag" />
  {{tags}}
</template>

...そしてtags.jsで

var tags = Session.set("tags", 1);

if (Meteor.isClient) {
    Template.tags.tags = function() {
        return Session.get("tags");
    };

    Template.tags.events({
        'click #submit': function() {
            console.log("You pressed the button");
            Session.set("tags", Session.get("tags") + 1);
        }
    });
}

...すべて正常に動作します。

誰かがもう少し光を当てることができますか?

4

1 に答える 1

3

これは正常です。関連するドキュメントは次のとおりです。

変更をトリガーできるリアクティブ データ ソースは次のとおりです。

  • セッション変数
  • コレクションに対するデータベース クエリ
  • 流星の状態
  • Meteor ユーザー
  • Meteor.userId
  • Meteor.loggingIn
于 2013-01-21T12:32:43.940 に答える