Jquery mobile jQuery Mobile在来回浏览时何时重新加载页面?
在我的移动webapp中来回浏览时,我尽量避免重新加载。jquerymobile似乎就是为此而设计的,但我很难控制这种行为 基本上,我有两页(Jquery mobile jQuery Mobile在来回浏览时何时重新加载页面?,jquery-mobile,Jquery Mobile,在我的移动webapp中来回浏览时,我尽量避免重新加载。jquerymobile似乎就是为此而设计的,但我很难控制这种行为 基本上,我有两页(page1和page2)第1页有到第2页的链接,反之亦然。第一次加载它们时,这两个页面(i)在ajax中加载数据,(ii)相应地更改DOM结构。我使用全局var来避免重新加载数据,这非常有效 假设page1(resppage2)在html中有一个名为dom10(respdom20)的DOM结构,并且在加载所有内容后有一个名为dom11(respdom21)
page1
和page2
)<代码>第1页有到第2页的链接,反之亦然。第一次加载它们时,这两个页面(i)在ajax中加载数据,(ii)相应地更改DOM结构。我使用全局var
来避免重新加载数据,这非常有效
假设page1
(resppage2
)在html中有一个名为dom10
(respdom20
)的DOM结构,并且在加载所有内容后有一个名为dom11
(respdom21
)的DOM结构
我的问题是:
- 我加载
,加载数据并将DOM从page1
更改为dom10
dom11
- 然后单击
,加载
,检索数据,DOM从page2
更改为dom20
。到目前为止还不错dom21
- 然后单击
返回。该页面与我在
中留下的页面一样。好极了,根本没有dom11
电话GET
- 最后,我再次点击
,这就是我受伤的地方。再次加载页面(
call),不检索数据,但dom被设置回GET
dom20
page1
时,我就会像离开它一样得到DOM,每当我点击page2
时,就会有一个get
调用,DOM会被重新加载
所以我的问题是,有没有办法防止重新加载jQuery Mobile中已经加载的页面
我可以想办法让我的DOM符合我的要求,但我希望避免不必要的调用减慢我的应用程序
如果你想玩它,你可以试试
非常感谢你的帮助
PS:令人惊讶的是,我在Firefox和Chrome上没有得到相同的行为。。。恐怕没有这么简单。您使用的是“单页布局”,它通过ajax加载每个页面:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta charset="utf-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script src="jquery/jquery-ui-1.8.18.custom.min.js"></script>
<script>var doNotLoadPage1Again = false; var doNotLoadPage2Again = false;</script>
</head>
<body>
<div data-role="page" id="page1">
<p id="info">loading...</p>
<a href="#page2">page2</a>
<script>
if(!doNotLoadPage1Again) {
// do some heavy loading stuff
$("#page1 #info").html("loading done");
doNotLoadPage1Again = true;
}
</script>
</div>
<!-- Page 2-- >
<div data-role="page" id="page2">
<p id="info">loading...</p>
<a href="#page1">page1</a>
<script>
if(!doNotLoadPage2Again) {
// do some heavy loading stuff
$("#page2 #info").html("loading done");
doNotLoadPage2Again = true;
}
</script>
</div>
</body>
</html>
测试
var doNotLoadPage1Again=false;var doNotLoadPage2Again=false;
正在加载
如果(!doNotLoadPage1Again){
//做一些重负荷的事情
$(“第1页信息”).html(“加载完成”);
doNotLoadPage1Again=真;
}
默认情况下,jQM总是对页面发出AJAX请求,即使您以前已经访问过它。如果将$.mobile.page.prototype.options.domCache设置为true代码>则只有jQM不会重新加载页面
如果需要刷新页面,则在调用$.mobile.changePage时需要将reloadPage
设置为true,否则页面将过时
但是要小心,如果你这样做,你的所有页面都会被附加到DOM中,从而导致一个影响性能的巨大DOM——你需要在JS中正确地管理它,这是一个不同的主题。但是想象一下,当DOM中有20个页面时,执行一个开放式$('.myClass')搜索。在我写的一个旧答案中,我有更多的细节:谢谢,这很有道理。在我的例子中,我将通过这样做来确保没有太多的反序列化,如果DOM结构清除了页面,那么重新加载DOM结构可能不会太糟糕,但是,我需要确保避免重做复杂的初始化内容,这可以通过javascript轻松完成。谢谢,它确实解决了我的具体示例。然而,我仍然喜欢有单独的页面,因为在我的实际情况下,他们是更长的,有单独的目的。我将尝试深入挖掘$.mobile.page.prototype.options.domCache,看看是否能找到适合我的案例的完美解决方案。