【问题标题】:Meteor Force Rerender of Handlebar Helpers手把助手的 Meteor Force 渲染
【发布时间】:2014-04-20 11:27:35
【问题描述】:

在 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>

如果我打开一个全新的选项卡并导航到 http://localhost:3000/content 之类的内容,这会在导航块上设置适当的 active 类。但是,如果我只是单击一个新选项卡,它不会更新 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();
  }  
})

有没有人可以重新渲染把手而无需物理地重新加载页面?

谢谢。

【问题讨论】:

    标签: javascript html meteor handlebars.js


    【解决方案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() + "");
      }  
    })
    

    【讨论】:

    • 赞成,因为它也解决了我的问题,但这感觉有点太脏,无法永久合并。自从发布此问题以解决此问题后,您还发现了什么?
    • 如果不幸地创建了相同的号码会怎样?
    • 我觉得这种可能性微乎其微,但它仍然是一个有效的批评。 (免责声明:3 年内没有使用 Meteor 编码,从那时起发生了很多变化。)一种可能的选择是简单地增加 r 会话参数。
    猜你喜欢
    • 2012-07-21
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多