Meteor:更改子模板而不重新渲染父模板

时间:2014-01-17 11:55:10

标签: meteor handlebars.js

根据Meteor的文档,更改#isolate块内的内容不会导致父模板重新呈现,但我遇到以下示例的不同行为,其中'hello'和'a'在我更改时重新呈现'标题':

<head>
  <title>testing</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
{{#isolate}}
  {{> a}}
{{/isolate}}

{{#isolate}}
  {{> b}}
{{/isolate}}

</template>

<template name='a'>
 a: {{title}}
</template>

<template name='b'>
 b: {{desc}}
</template>

这是javascript

if (Meteor.isClient) {
  Template.hello.rendered = function () {
    console.log('hello')
  };

  Template.a.rendered = function () {
    console.log('a')
  };

  Template.b.rendered = function () {
    console.log('b')
  };

  Handlebars.registerHelper('title', function() {
    return Session.get('title');
  });

  Handlebars.registerHelper('desc', function() {
    return Session.get('desc');
  });

}

我误解了什么吗?我在这里看到了一个类似但未解答的问题: Meteor: Changing a subtemplate without changing parent template

1 个答案:

答案 0 :(得分:1)

是的,父模板将被重新渲染,因为它必须重新绘制。

虽然只有{{#isolate}}位内的部分会发生变化(包含模板a),但模板hello会发生变化,这就是调用重新渲染的原因。

每当Spark渲染引擎(为流星模板系统提供动力的当前版本)更改模板的html时,都会调用.rendered()

在新的渲染引擎中,Shark,.rendered()只会在初​​始加载时调用一次。这可能更适合您正在寻找的内容,但它仍处于预览版本中