如何正确重定向到JQuery Mobile中的动态页面?

问题描述:

我正在JQM中运行一个动态页面生成器,并努力使它正常工作。如何正确重定向到JQuery Mobile中的动态页面?

当用户点击一个链接,我拦截changePage调用是这样的:

... 
    .on("pagebeforechange", function (e, data) { 
    if (typeof data.toPage === "string") { 
     init.parsePage(util.parseLink(data.toPage), true); 
     e.preventDefault(); 
    } 
    }) 

将打电话给我parsePage方法,产生了新的一页,初始化并追加到像这样的DOM:

$(document).enhanceWithin(); 
    $.mobile.initializePage(); 
    // go to the new page 
    $.mobile.changePage("#" + config.id); 

我的问题是,使用e.preventDefault()和新changePage通话将被逮住我再次pagebeforechange监听器和循环下去。我也尝试不阻止初始changepage调用,只是修改参数data.toPage,但我的页面组装时间太长,无法在组装页面之前延迟JQM。

问:
我如何触发没有被我的听众或更好的“中招”的新转变,我怎么拖延JQM过渡,直到一切准备就绪(承诺将是不错的位置: - )

谢谢!

+0

我在做类似jQM的事情。我抓取pagebeforechange事件以创建一个处理URL变量的自定义方式。我把它变成了一个相当独立的插件,但它会覆盖你已有的任何pagebeforechange事件处理。 –

+0

我有我自己的“插件”处理,所以这很好。我想知道的是,如果你生成一个新的页面,你会触发一个新的? JQM更改页面。如果是这样,你如何防止你的pagebeforechange处理程序捕获这个新的changepage调用? – frequent

+0

pagebeforechange将被解雇,但你可以通过URL后的任何地方传递一些信息,以便在处理程序中以不同的方式运行 –

我目前的工作(不符合要求)解决方案:

// 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中,所以我return

问题与此:

  • 让我们回到第一个页面总是会找到DOM中的页面或触发产生一个新的页面,当第一页的URL是/(当它不应该停止转换) 。可以通过比较data.toPage(例如localhost/app /)到$ .mobile.getDocumentUrl()(文档的url - 记住你总是停留在你加载的第一个DOM,因此是一个documentUrl)来解决。这允许识别第一页。
  • pagebeforechange也会触发弹出窗口被打开,所以这也必须不会触发转换。正在检查options.role
  • 如果data.toPage是一个完整的URL而不是#foo