流星力量重新召唤车把手

时间:2014-03-14 23:12:52

标签: javascript html meteor handlebars.js

在Meteor中,我有一个带有自定义手柄方法的导航栏,用于确定选项卡是否处于活动状态。

JS:

Handlebars.registerHelper('getClass',function(a){
    url = document.URL.split("/"); //e.g. http://test.com/something, so 3rd value will have link thing
    url = "/" + url[3];
    val = Router.path(a);
    return url == val ? "active" : "";
});

HTML代码段:

  <li class="{{getClass 'homepage'}}"><a href="{{pathFor 'homepage'}}">Home</a></li>
  <li class="{{getClass 'content'}}"><a href="{{pathFor 'content'}}">Content</a></li>
  <li class="{{getClass 'items'}}"><a href="{{pathFor 'items'}}">Items</a></li>

如果我打开一个全新的标签页,导航到active之类的内容,则会在导航栏上设置相应的http://localhost:3000/content类。但是,如果我只是单击一个新选项卡,它将不会更新active类。例如,从主页到content页面。但是,如果我单击items选项卡然后单击另一个选项卡,它将更新,但只会更新一次。因此,如果我转到项目标签,items将拥有活动类,然后我点击的下一个类将获取它,将其从items中删除。不幸的是,这仅适用一次。我认为这是因为items包含来自数据库的内容,但我不确定。无论如何,如果可能的话,我需要一种方法来重新处理车把助手。

我尝试使用以下JS无济于事:

Content = {};
Content._dep = new Deps.Dependency;

Template.header.events({
  'click a': function () {
      console.log('abc');
    Content._dep.changed();
  }  
})

是否有人有办法重新渲染把手而无需亲自重新加载页面?

感谢。

1 个答案:

答案 0 :(得分:1)

我刚修好了。基本上,我添加了一个带有随机数的会话,并在点击时更新了该会话。它似乎已经成功了。

更新的代码:

Handlebars.registerHelper('getClass',function(a){
    url = document.URL.split("/"); //e.g. http://test.com/something, so 3rd value will have link thing
    url = "/" + url[3];
    val = Router.path(a);
    if(Session.get('r'))
        void(0);
    return url == val ? "active" : "";
});


Template.header.events({
  'click a': function () {
      Session.set('r', Math.random() + "");
  }  
})