meteor - 自动重新渲染 : confusion about reactiveness

标签 meteor

假设我有一个名为 Navbar 的模板,它包含在 MainAbout 页面中。在 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/

相关文章:

Meteor js 并行数据库获取。

javascript - 如何在需要双引号的地方插入包含双引号的 meteor 模板?

javascript - 用户登录时的 meteor 事件

meteor - Electron package - ASAR 文件错误

javascript - 激活 meteor (turkserver)时应用程序崩溃

javascript - 删除 Discover Meteor Book 中的 URL 字段

mongodb - 如何让meteor.com应用程序使用外部mongo db

javascript - 模板助手中的异常 : TypeError: Cannot read property 'profile' of undefined

javascript - 为什么我的 $().css({ "visibility": "visible"}) working?

node.js - 在 Meteor 1.5.1 中使用 buffermaker 时找不到模块 './lib/BufferMaker'