Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果更新了Meteor中两个模板引用的文档,则防止在Meteor中进行不必要的渲染_Meteor - Fatal编程技术网

如果更新了Meteor中两个模板引用的文档,则防止在Meteor中进行不必要的渲染

如果更新了Meteor中两个模板引用的文档,则防止在Meteor中进行不必要的渲染,meteor,Meteor,我有一个Meteor项目,其中两个不同的模板依赖于来自同一文档的数据: { "title": "My Project", "data": "My project data" } 一个模板呈现“标题”,另一个模板呈现“数据” 如果用户更改文档中的“数据”字段,我不希望使用“标题”字段的模板重新呈现。我只想要使用“数据”重新渲染的模板 例如,标题可能位于页眉中,如果项目的数据发生更改,则不需要重新呈现该页眉 如何做到这一点 我的流星模板: <head> <title>e

我有一个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>
当项目文档中的任一字段发生更改时,此代码当前将输出“呈现的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');
  }
}