Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Jquery Mobile中正确重定向到动态页面?_Javascript_Jquery_Jquery Mobile_Url Redirection_Dynamic Pages - Fatal编程技术网

Javascript 如何在Jquery Mobile中正确重定向到动态页面?

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(); }

我正在JQM中运行一个动态页面生成器,并且正在努力使它正常工作

当用户单击某个链接时,我会截获
changePage
调用,如下所示:

  ...
  .on("pagebeforechange", function (e, data) {
    if (typeof data.toPage === "string") {
      init.parsePage(util.parseLink(data.toPage), true);
      e.preventDefault();
    }
  })
它将调用my
parsePage
方法,该方法生成一个新页面,将其初始化并附加到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中,因此I
return

这方面的问题:

  • 当第一个页面URL为
    /
    时,返回到第一个页面总是会在DOM中找到一个页面(在不应该的时候停止转换),或者触发生成一个新页面。可以通过将
    data.toPage
    (例如localhost/app/)与$.mobile.getDocumentUrl()进行比较(文档的url-请记住,您总是停留在加载的第一个DOM中,因此是documentUrl)来解决此问题。这允许识别第一页
  • pagebeforechange
    也会在打开弹出窗口时触发,因此也不能触发转换。检查
    选项。角色
  • 如果data.toPage是一个完整的URL而不是
    #foo
    ,该怎么办

我对jQM做了类似的事情。我抓取了pagebeforechange事件,以便创建一种处理URL变量的自定义方法。我把它变成了一个相当独立的插件,但它会覆盖您已有的任何pagebeforechange事件处理。我想知道的是,如果你生成了一个新页面,你会触发一个新页面吗?JQM将页面更改为它。如果是这样,您如何防止pagebeforechange处理程序捕获此新的changepage调用?pagebeforechange将被触发,但您可以在哈希之后的任何位置通过url传递某些内容,以在handler中表现不同这有帮助吗@奥马尔:不是。我或多或少也在做同样的事情,但它必须是完全通用的,所以没有特定的条件和页面ID。为了增加趣味性,如果返回第一页,我还需要跳过生成新页面,这可能只是
/