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 の哲学に反するようです。