如果更新了Meteor中两个模板引用的文档,则防止在Meteor中进行不必要的渲染
我有一个Meteor项目,其中两个不同的模板依赖于来自同一文档的数据:如果更新了Meteor中两个模板引用的文档,则防止在Meteor中进行不必要的渲染,meteor,Meteor,我有一个Meteor项目,其中两个不同的模板依赖于来自同一文档的数据: { "title": "My Project", "data": "My project data" } 一个模板呈现“标题”,另一个模板呈现“数据” 如果用户更改文档中的“数据”字段,我不希望使用“标题”字段的模板重新呈现。我只想要使用“数据”重新渲染的模板 例如,标题可能位于页眉中,如果项目的数据发生更改,则不需要重新呈现该页眉 如何做到这一点 我的流星模板: <head> <title>e
{ "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>
当项目文档中的任一字段发生更改时,此代码当前将输出“呈现的projectTitle”和“呈现的projectData”,这表明这两个模板都在重新呈现
编辑我不知道是否有一种“正确”的方法可以做到这一点,但是可以发布两个订阅,它们返回文档的不同部分。这似乎与Meteor的理念背道而驰。您可以从
会话
变量读取模板,然后使用Meteor.autorun
适当设置会话变量
然后,当对象发生更改时,Meteor.autorun
将再次执行,但如果字段没有更改,会话将不会更改
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');
}
}