2014-01-17 69 views
0

根据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

请注意'{{#isolate}}'[不再](https://github.com/meteor/meteor/wiki/Using-Blaze#no-more-constant-isolate-or-preserve)[Spacebars]的一部分(https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md)。 –

回答

1

是的父模板将被重新呈现,因为它必须重绘。

尽管只有{{#isolate}}位内的部分会发生更改(包含模板a),但模板hello本来会发生更改,这就是为什么重新呈现被调用的原因。

每当模板的html被Spark渲染引擎(当前支持meteor的模板系统的版本)更改时,.rendered()将被调用。

在新的渲染引擎中,Shark,.rendered()只会在初始加载时调用一次。这可能更多的是你要找的东西,但它仍然在预览版

+0

谢谢,我会研究新引擎。 https://github.com/meteor/meteor/wiki/New-Template-Engine-Preview#fine-grained-updates-that-play-nicely-with-jquery – user2191332