根据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
答案 0 :(得分:1)
是的,父模板将被重新渲染,因为它必须重新绘制。
虽然只有{{#isolate}}
位内的部分会发生变化(包含模板a),但模板hello
会发生变化,这就是调用重新渲染的原因。
每当Spark渲染引擎(为流星模板系统提供动力的当前版本)更改模板的html时,都会调用.rendered()
。
在新的渲染引擎中,Shark,.rendered()
只会在初始加载时调用一次。这可能更适合您正在寻找的内容,但它仍处于预览版本中