2015-05-21 2 views
1

настоящее время у меня этот код:Как перезагрузить маршрут, используя hasher.js и crossroads.js?

crossroads.addRoute('/login', function(){ 
    $.ajax({ 
     url: '/login', 
     type: 'GET', 
     data: { 

     }, 
     success: function(msg) { 
      $('#' + main_window).html(msg); 
     } 
    }) 
}); 

Наряду с этим hasher.js для поддержания истории:

function parseHash(newHash, oldHash){ 
    crossroads.parse(newHash); 
} 
hasher.initialized.add(parseHash); //parse initial hash 
hasher.changed.add(parseHash); //parse hash changes 
hasher.init(); //start listening for history change 

$('a').on('click', function(e) { 
    e.preventDefault(); 
    hasher.setHash($(this).attr('href')); 
}); 

Теперь, когда у меня есть ссылка, которая говорит #/логин и нажмите на нее, страница Войти загружается нормально. Однако, если пользователь снова нажимает ссылку для входа, страница не перезагружается. Я знаю, что клик регистрируется, но маршрутизация/хеширование не срабатывает. Как мне это сделать?

Любая помощь была бы принята с благодарностью. Благодаря!

ответ

2

Вы ничего не меняете. hasher.setHash("#/currentpage"), потому что вы уже на этой странице. Таким образом, событие изменения никогда не запускается. Вы могли бы просто пойти:

$('a').on('click', function(e) { 
    e.preventDefault(); 
    hasher.setHash(''); 
    hasher.setHash($(this).attr('href')); 
}); 

Но что бы загромождать историю, чтобы вы могли заставить перезагрузки на клик, если вы сделаете метод загрузки в наличии:

var loadLogin = function(){ 
    $.ajax({ 
     .... your ajax settings .... 
    }); 
}; 
crossroads.addRoute('/login', loadLogin); 

$('a').on('click', function(e) { 
    e.preventDefault(); 
    var newHash = $(this).attr('href'); 
    if(newHash === '/login' && hasher.getHash() === '/login') { 
     loadLogin() 
    } else { 
     hasher.setHash(newHash); 
    } 
}); 

EDIT Как отметил @Patchesoft, перекресток имеет свойство, называемое ignoreState, что заставляет любой запрос проходить через функцию маршрутизатора, даже если на текущей странице - https://millermedeiros.github.io/crossroads.js/#crossroads-ignoreState

+0

Спасибо! Это действительно помогает мне :) – Patchesoft

+0

Есть ли все равно, чтобы сделать его более общим ... как сделать это для всех ссылок, а не только для логина? – Patchesoft

+1

Также я нашел эту настройку: crossroads.ignoreState = true; позволяет мне обновлять один и тот же маршрут для всех, кто застрял в этой проблеме. – Patchesoft

Смежные вопросы