1

2 つの異なるテンプレートが同じドキュメントのデータに依存する Meteor プロジェクトがあります。

{ "title": "My Project", "data": "My project data" }

1 つのテンプレートは「タイトル」をレンダリングし、別のテンプレートは「データ」をレンダリングします。

ユーザーがドキュメントの「データ」フィールドを変更した場合、「タイトル」フィールドを使用するテンプレートを再レンダリングしたくありません。「データ」を使用して再レンダリングするテンプレートのみが必要です。

たとえば、タイトルは、プロジェクトのデータが変更された場合に再レンダリングする必要のないページ ヘッダーにある場合があります。

これはどのように達成できますか?

マイ メテオ テンプレート:

<head>
  <title>experiment</title>
</head>

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

<template name="hello">
    <div>
        My projects.
    </div>

    {{#each projects}}
    <div>
        {{>projectTitle}}
        {{>projectData}}
    </div>
    {{/each}}

</template>

<template name="projectTitle">
    <div>
        Project title: {{title}}
    </div>
</template>

<template name="projectData">
    <div>
        Project data: {{data}} 
    </div>
</template>

私の流星 Javascript:

Experiments = new Meteor.Collection("experiments");

if (Meteor.isClient) {
  Template.hello.projects = function() {
    return Experiments.find();
  }

  Template.projectTitle.title = function() {
    return Experiments.find().fetch()[0].title;
  }

  Template.projectData.data = function() {
    return Experiments.find().fetch()[0].data;
  }

  Template.projectTitle.rendered = function() {
    console.log('Rendered projectTitle');
  }

  Template.projectData.rendered = function() {
    console.log('Rendered projectData');
  }
}

このコードは現在、プロジェクト ドキュメントのいずれかのフィールドが変更されるたびに、「Rendered projectTitle」と「Rendered projectData」を出力します。これは、両方のテンプレートが再レンダリングされていることを示しています。

編集これを行う「正しい」方法があるかどうかはわかりませんが、ドキュメントの別々の部分を返す2つのサブスクリプションを公開できます。ただし、これは Meteor の哲学に反するようです。

4

1 に答える 1

2

テンプレートを変数から読み取らせてから、Sessionを使用してセッション変数を適切に設定できますMeteor.autorun

その後、オブジェクトが変更Meteor.autorunされると、再び実行されますが、フィールドが変更されていない場合、セッションは変更されません。

于 2013-04-12T13:28:04.820 に答える