2014-06-12 62 views
0

我发现jQuery手机并未重新使用加载的页面。jQuery Mobile DOM页面重用

$(document).on("pagecontainershow", function() { 
    var activePage = $.mobile.pageContainer.pagecontainer("getActivePage"); 
    if (activePage.hasClass("search-page")) { 

     var controller = activePage.data("controller"); 

     if (!controller) { 

      controller = new SearchController(activePage); 
      activePage.data("controller", controller); 
     } 

     controller.loadPage(); 
    } 
}); 

再后来...

$.mobile.pageContainer.pagecontainer("change", "search.html"); 

是包含

<div data-role="page" class="search-page"> 

然而HTML文档中,在每个导航到search.html,activatePage.data( “控制器” )是空的,所以我重新初始化我的SearchController。

我以为jQuery手机重用页面已经加载到DOM?

+0

如果你想保存在dom中,可以在search.html页面div中加入'data-dom-cache =“true”'。一旦隐藏,外部页面将被删除,而不会被缓存。 – Omar

+0

什么是外部网页? – Jeff

+0

任何通过Ajax加载的页面,例如Search.html是一个外部页面。 – Omar

回答

3

jQuery Mobile使用两种截然不同的页面模板解决方案。

  • 多opage - 其中每一页是一个HTML文件
  • 多HTML的一部分 - 如果单页当然是搭配的一个HTML文件的一部分

你可以那些模板。

当jQuery Mobile初次初始化时,初始HTML文件被完全加载到DOM中。这个内容将保留在DOM中,直到页面刷新(或者你强行删除它是一个糟糕的决定)。

每个其他的HTML页面在你转换到它时都会被加载,并且一旦你转换到HTML页面就会被删除。基本上它只要活跃就能在DOM中保持活力。

因此,只需简单地说,只有在初始HTML文件中找到的页面才会永久保留在DOM中,其他所有内容都会在您激活时加载/删除。