javascript - jQuery Mobile DOM 页面重用

标签 javascript jquery-mobile

我发现 jQuery mobile 没有重用加载的页面。

$(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");

这是一个包含

的 html 文档
<div data-role="page" class="search-page">

但是,每次导航到 search.html 时,activatePage.data("controller") 为 null,因此我重新初始化我的 SearchController。

我认为 jQuery mobile 重用了已经加载到 DOM 中的页面?

最佳答案

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

  • 多页面 - 每个页面都是单个 HTML 文件的一部分
  • 多 HTML - 单个页面是单个 HTML 文件的一部分

您当然可以混合使用这些模板。

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

当您转换到它时,所有其他 HTML 页面都会被加载,并且一旦您从它转换,它就会被删除。基本上,只要它处于事件状态,它就会在 DOM 中保持事件状态。

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

关于javascript - jQuery Mobile DOM 页面重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186126/

相关文章:

javascript - 动态加载的 phonegap.js 问题

javascript - 简单的 AJAX 帮助请求 : significance of "+=" applied to string

javascript - OpenLayers 中基于标签的过滤器

jQuery Mobile 作为 Web CRM

javascript - 如何使用 JQuery Mobile 为 ajax-fill <select> 默认选择 <option>?

javascript - 如何用两根手指点击显示/隐藏 jQuery 移动标题?

javascript - 循环中的对象解构

javascript - Leaflet 中的 Circle getBounds() 方法失败

javascript - 使用数组的 GetJson

javascript - 由带有 jsfiddle 的嵌套 ListView 引起的多个 pagebeforecreate 事件