Meteor Force из Handlebar повторно вызывать Помощников

0

В 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();
  }  
})

Есть ли у кого-нибудь способ переустановить рули без физической перезагрузки страницы?

Благодарю.

Теги:
handlebars.js
meteor

1 ответ

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() + "");
  }  
})
  • 0
    проголосовал, потому что это решило мою проблему тоже, но это кажется слишком грязным, чтобы включить постоянно. Нашли ли вы что-нибудь еще после публикации этого сообщения, чтобы это исправить?
  • 0
    что произойдет, если, к сожалению, будет создан такой же номер?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню