【问题标题】:jQuery Mobile multi-page template cachingjQuery Mobile 多页模板缓存
【发布时间】:2014-07-17 16:29:33
【问题描述】:

我有一个使用 jQuery Mobile 构建的应用程序,其中所有页面都在一个 HTML 文件中。当我导航到一个页面,填写一个表单然后离开它时,我希望我填写的表单数据在我下次进入该页面时出现。我的问题是,这是一个缓存问题吗?如果是这样,我该如何预防?我试过这样的事情:

pageContainerElement.page({ domCache: false });

$(document).bind("mobileinit", function(){
    $.mobile.page.prototype.options.domCache = false;
});

但是每当我返回页面时数据仍然存在

【问题讨论】:

    标签: jquery html jquery-mobile caching


    【解决方案1】:

    您所体验的一切正是 jQuery Mobile 的预期工作方式。您已阅读有关缓存和预取的文档,但同时您缺少大局,主要是因为您没有阅读所有内容。

    只有在使用多 HTML 模板时,使用 jQuery Mobile 缓存才有意义。让我们看看你现在的状态。您正在使用多页面模板,其中每个页面都是单个 HTML 页面的一部分。在这种情况下,初始 HTML 文件已完全加载到 DOM 中,它会一直保留在那里,直到页面被刷新或直到您使用 rel="external" 打开一些后续 HTML 文件(相当于整页重启)。

    在任何其他情况下,初始 HTML 页面将永远保留在 DOM 中,您无法阻止它。基本上,如果加载到 DOM 中的页面是初始 HTML 文件的一部分,则无法删除它们。当然你可以强行删除它们,但应用程序会遇到历史导航问题,我不想建议这种情况。

    您有两种解决方案:

    1. 将该特定页面移动到其他 HTML 文件。在这种情况下,当您从该特定页面转换到其他页面时,它将从 DOM 中删除。

    2. 在 pagebeforechange 页面事件期间清除以前的表单数据

    【讨论】:

    • 感谢您的回答。我最初将它作为单页模板,但在设备上看起来很慢,所以我切换到多页并且效果更好,所以我不太热衷于切换回来。至于清理以前的表单数据,该页面上有很多表单,所以我必须单独清除每个表单还是在 pageshow 之前可以使用某种全局清除?
    • 不幸的是,没有办法进行全局清除。您可以做的是创建一个函数,该函数将扫描整个页面/页面通过每个表单元素并将其更改回默认状态。像输入文本这样的一些元素将很容易做到。其他元素如 select 会更难。例如,假设您想清除 select 或 radio 元素,只需将自定义属性(如 data-default="true")添加到默认元素(例如 ) 并在清洁过程中使用。这样您就可以立即清理整个页面。
    • 如果这个答案已经回答了您的问题,请考虑accepting it。如果您希望我为您创建一个完整的页面擦除解决方案,只需打开另一个问题并立即完成。
    • 谢谢,我发布了另一个问题并接受了这个
    • Tnx 并给我一些时间来正确地做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多