我迷路了....我正在尝试在pagebeforechange上重定向 Jquery Mobile 转换- 根据JQM 文档。
这应该适用于向前和向后的转换。虽然从技术上讲,我在向后过渡时遇到了问题。第一个有效,之后每次后退btn点击我都会得到2+向后转换。
我已经排除了 URL(现在只传递完整路径与路径和对象(如 $('#page') );不是这样。现在我正在寻找另一个罪魁祸首,但找不到它。
也许其他人看到了什么或者可以给我一个提示。谢谢参观:
带有注释的简要设置:
// hashchange listener - just to see when hashchange fires
$(window).on('hashchange', function(e, data){
console.log("hashchange detected" );
});
// re-router
$(document).on("pagebeforechange", function (e, data) {
// block multiple events
if(data.options.fromHashChange == true) {
if(self.options.$blockMultiPbc == true) {
console.log("blocked 1");
self.options.$blockMultiPbc = false;
return;
}
}
// block $('#page') page-calls (triggered from trailing hashchange
if(typeof data.toPage !== 'string') {
console.log("blocked 2");
return;
}
// redirect
if(data.options.fromHashChange == true) {
console.log("executing");
// for hashchanges
self.panelHash(e, data);
} else {
// for changepages
self.panelTrans(e, data);
}
});
// panelHash function - here I reconfig data.options to redirect
panelHash: function( e, data ) {
// block multiple pagebeforechanges
self.options.$blockMultiPbc = true;
if ( some condition ) {
console.log("MULTIVIEW");
// tweak changepage options
data.toPage = ...newULR (not $('object'))
data.options.fromPage = ...new fromPage
data.options.changeHash = true;
data.options.reverse = true;
console.log( newURL );
} else {
// JQM does this
}
}
这是一个示例页面: 示例
要重现 click page2 menu, page3 menu,清除控制台,单击浏览器返回一次,检查控制台(SINGLE RUN),再次单击浏览器返回,检查控制台(两次运行...)
问题
我不是在寻找解决方案 - 只是关于可能导致第二次向后过渡两次触发的一些想法。
感谢您的一些想法!
编辑
我在 sript 中添加的控制台越多,就越明显,第二个不需要的 hashchange 会在短暂的延迟后出现。我首先认为它与 JQM 的fake_onhashchange事件有关,但完全删除它并没有成功。继续寻找。
EDIT2 - found an issue on Github - so it's not my script... phew... Still hints are welcome :-)