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