Javascript 如何在Jquery Mobile中正确重定向到动态页面?
我正在JQM中运行一个动态页面生成器,并且正在努力使它正常工作 当用户单击某个链接时,我会截获Javascript 如何在Jquery Mobile中正确重定向到动态页面?,javascript,jquery,jquery-mobile,url-redirection,dynamic-pages,Javascript,Jquery,Jquery Mobile,Url Redirection,Dynamic Pages,我正在JQM中运行一个动态页面生成器,并且正在努力使它正常工作 当用户单击某个链接时,我会截获changePage调用,如下所示: ... .on("pagebeforechange", function (e, data) { if (typeof data.toPage === "string") { init.parsePage(util.parseLink(data.toPage), true); e.preventDefault(); }
changePage
调用,如下所示:
...
.on("pagebeforechange", function (e, data) {
if (typeof data.toPage === "string") {
init.parsePage(util.parseLink(data.toPage), true);
e.preventDefault();
}
})
它将调用myparsePage
方法,该方法生成一个新页面,将其初始化并附加到DOM中,如下所示:
$(document).enhanceWithin();
$.mobile.initializePage();
// go to the new page
$.mobile.changePage("#" + config.id);
我的问题是,使用e.preventDefault()
和一个新的changePage调用将再次在我的pagebeforechange
侦听器中捕获并永远循环。我还试图不阻止最初的changepage调用,而只是修改data.toPage
参数,但是我的页面的组装需要“太长”的时间,并且在组装页面之前无法延迟JQM
问题:我如何触发一个没有被我的监听器“捕获”的新转换,或者更好,我如何延迟JQM转换,直到一切准备就绪(这里的承诺很好:-) 谢谢 我当前的工作(不满意)解决方案:
// generate dynamic pages
.on("pagebeforechange", function (e, data) {
var page;
if (typeof data.toPage === "string") {
page = document.getElementById(data.toPage.replace("#",""));
if (page || data.toPage === $.mobile.getDocumentUrl()) {
return;
}
init.parsePage(util.parseLink(data.toPage), true);
e.preventDefault();
}
})
所以我检查页面是否在DOM中,因为当我动态生成一个页面时,它将在更改分页之前被注入DOM中。这样,在更改前的第一个页面上,该页面不存在,因此将生成该页面,而在第二个页面上,该页面将位于DOM中,因此Ireturn
这方面的问题:
- 当第一个页面URL为
时,返回到第一个页面总是会在DOM中找到一个页面(在不应该的时候停止转换),或者触发生成一个新页面。可以通过将/
(例如localhost/app/)与$.mobile.getDocumentUrl()进行比较(文档的url-请记住,您总是停留在加载的第一个DOM中,因此是documentUrl)来解决此问题。这允许识别第一页李>data.toPage
也会在打开弹出窗口时触发,因此也不能触发转换。检查pagebeforechange
选项。角色
- 如果data.toPage是一个完整的URL而不是
,该怎么办#foo
/
。