1

{{#each game}}したがって、次のテンプレートを表示して反復されるテンプレートがたくさんあります。

<template name="game">
{{#if condition}}
    <div class="box">
        Page 1
    </div>
{{else}}
    <div class="box">
        Page 2
    </div>
{{/if}}
</template>

「ページ1」ボックスをクリックしたときに「ページ2」を表示したいので、次のようにします。

Template.game.events({
    'click .box': function(e) {
        Session.set("condition", true);
    }
});

しかし、他のすべてのゲーム テンプレートがページ 2 に遷移するのではなく、クリックされたものだけが表示されます。どうすればこれを達成できますか?

編集:変更は、すべてのユーザーではなく、現在のユーザーにのみ影響する必要があります。

4

3 に答える 3

1

セッション変数を使用しないでください! まさにその理由はあなたが抱えている問題です。それらは古いグローバル変数と同等です。代わりにテンプレートのデータを使用してください。これはローカルであり、この場合は必要な動作を制御するために使用できます。

あなたの例のテンプレートの場合:

Template.game.created = function() {
  this.data.conditionValue = 'something';
  this.data.conditionDep = new Deps.Dependency();
};

Template.game.condition = function() {
  this.conditionDep.depend();
  return this.conditionValue;
};

Template.game.events({
  'click .box': function(e, t) {
    t.data.conditionValue = 'somethingElse';
    t.data.conditionDep.changed(); 
  },
});
于 2014-04-01T01:54:37.830 に答える
1

ゲームが に保存されており、現在のユーザーだけでなく、すべてのユーザーに反映されるドキュメントのプロパティであると仮定すると、Meteor.Collectionconditionのようなことができます。

Template.game.events({
    'click .box': function(event, template) {
        Games.update(
            {_id: template.data._id},
            {$set: {condition: !template.data.condition}}
        );
    }
});

現在のユーザーにのみ影響を与える必要がある場合は、テンプレート インスタンス固有のセッション変数を使用して、次のヘルパー関数でそれを返すことができますcondition

Template.game.events({
    'click .box': function(event, template) {
        Session.set("condition-" + template.data._id, true);
    }
});

Template.game.condition = function() {
    return Session.get("condition-" + this._id);
};

ローカル コレクションでも同様の機能を実現できます。

于 2014-04-01T01:41:03.660 に答える
0

また、id を使用してセッションを使用することは最良のアイデアとは思えず、セッションを使用するよりも優れていると思われるこの回答を見つけました: Using Meteor sessions to toggle templates

于 2015-07-27T05:43:17.687 に答える