假设我有一个名为 Navbar
的模板,它包含在 Main
和 About
页面中。在 Navbar
模板中,我有一个搜索栏组件,我只想在 Main
模板上显示它。我定义了一个辅助函数,如下所示:
Template.Navbar.helpers({
'isMain': function() {
return location.pathname == '/';
}
})
在 navbar.html 中,
{{#if isMain}}
<div class="search">search</div>
{{/if}}
只要您刷新页面,它就可以很好地工作。这是因为在主页上,Navbar
模板已经呈现,当您转到 About
页面时,它不会重新呈现。作为解决方法,我正在考虑将辅助函数包含在 Template.autorun
中。
问:这里究竟发生了什么?处理此类问题的常规方法是什么?每次我去主页时,我都在考虑做 Session.set("isMain", true)
。
最佳答案
您的 isMain
模板助手不是响应式(Reactive)的,因为它不依赖于任何反应式数据源(查询位置对象,这是非响应式(Reactive)的)。
如果您使用的是 iron:router
,您可以这样做:
Template.Navbar.helpers({
'isMain': function() {
return Router.current().route.getName() == 'main';
}
});
鉴于您已经声明了如下主要路线:
Router.route("/", {
name: "main",
[...]
});
如果您不使用 iron:router
,则必须依赖其他东西,例如 Session
变量来跟踪页面更改并相应地设置其值.
关于meteor - 自动重新渲染 : confusion about reactiveness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720434/