在流星中使用基于url的通用模板时显示某些元素

时间:2015-10-16 07:30:06

标签: javascript meteor

我在两页的常用模板上使用。我必须在一个页面中显示一些行。所以我添加了一个if函数来检查当前的url。它只适用于我一次。回到同一个网址后,我得到了以前网址的价值。然后这不会改变。下面是一个示例代码。怎么做到这一点?

以下是我的代码

Url- / template1

Template1.html

 <template name="template1">
  {{>commontemplate}}
  </template>

网址 - / template2

Tempalate2.html

   <template name="tempalte2">
  {{>commonTemplate}}
 </template>

CommonTemplate.html

 <template name="commonTemplate">
  {{#if isAdmin 'template1'}}
   <div> hello</div>
  {{else}}
  <div> hai</div>
 {{/if}}
 </template>

CommonTemplate.js

   Template.CommonTemplate.helpers({
   isAdmin: function (val) {
    var path = window.location.pathname;
    var str = path.split("/");
    return  val === str[1];
   }
 })

1 个答案:

答案 0 :(得分:1)

它没有重新运行的原因是你的辅助函数没有反应依赖。正常的Javascript变量(如window.location.pathname)不会指示反应计算(如辅助函数)在其值发生变化时重新运行。

两种最简单的可能性是:

  1. 为路线命名,并在辅助功能中使用FlowRouter.getRouteName(),其中 被动。
  2. 将行FlowRouter.watchPathChange()添加到助手中,该助手不会返回任何内容,但确保每当路径发生变化时重新运行包含的被动功能。 FlowRouter API
  3. 另一种选择是简单地使用CSS。看看meteor-london:body-class,它将路线名称作为一个类附加到正文中,允许您根据CSS中的路线选择性地显示或隐藏内容。