我有一个 Meteor 项目,其中两个不同的模板依赖于同一文档中的数据:
{ "title": "My Project", "data": "My project data" }
一个模板呈现“标题”,另一个呈现“数据”。
如果用户更改文档中的“数据”字段,我不希望使用“标题”字段的模板重新呈现。我只想要使用“数据”的模板重新渲染。
例如,标题可能在页眉中,如果项目的数据发生更改,则不需要重新渲染。
如何做到这一点?
我的流星模板:
<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');
}
}
每当 Project 文档中的任一字段发生更改时,此代码当前都会输出“Rendered projectTitle”和“Rendered projectData”,这表明两个模板都在重新渲染。
编辑我不知道是否有一种“正确”的方法可以做到这一点,但可以发布两个订阅,它们返回文档的单独部分。不过,这似乎与 Meteor 的哲学背道而驰。