1

我有一个 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 的哲学背道而驰。

4

1 回答 1

2

您可以让模板从Session变量中读取,然后使用Meteor.autorun.

然后当您的对象更改时,Meteor.autorun将再次执行,但如果字段未更改,则 Session 不会更改。

于 2013-04-12T13:28:04.820 回答