如何使用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')); });
现在,当我有一个显示#/ login并点击它的链接时,登录页面可以正常加载。 但是,如果用户再次单击登录链接,则不会重新加载页面。 我知道点击正在注册,但路由/散列没有触发。 我该如何设法做到这一点?
任何帮助将不胜感激。 谢谢!
您没有使用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); } });
编辑正如@Patchesoft指出的那样,十字路口有一个名为ignoreState
的属性,它会强制任何请求通过路由器function,即使在当前页面上 – https://millermedeiros.github.io/crossroads.js/#crossroads- ignoreState