我目前正在构建一个简单的jQuery Mobile应用程序。目前,如果我想在页面加载之前或之后做一些事情,我使用以下调用钩子:
显示页面时(例如插入数据/模板):
$(window).on('pageshow', function() {
if ($('#pageId').length > 0) {
doStuff();
}
});
如果用户移动到新页面(我想保存一些值):
$(document).delegate('#pageId #buttonNext', 'click', function() {
doStuff();
});
我有两个问题:
有没有更好,更优雅的方式来做到这一点(我确信有)?
在每次在safari关闭后重新打开应用程序时,在移动设备(尤其是iOS Safari)上,pageshow
方法再次被触发,例如重新进入已完全构建的页面。有没有办法防止这种行为?
答案 0 :(得分:2)
如果我理解正确,你想要一个只触发一次的事件,以及在页面转换期间保存一些值的更好方法。
有几个页面事件在应用程序生命周期中只触发一次,如果多次访问页面都无关紧要。
前两个要提及的是 pagebeforecreate 和 pagecreate ,这两个事件只会在页面创建之前和期间触发一次。这也是添加动态生成内容的绝佳机会,因为jQuery Mobile将进一步增强其内容。
第三页事件被称为 pageinit ,它与经典jQuery文档准备就绪。与前面提到的2个事件一样,它只会触发一次,但这也是jQuery Mobile内容即将被增强的时刻,因此此时添加的每个动态内容必须是 manually enhanced 。此事件也非常适合事件绑定,因为与 pageshow 不同,在 pageinit
中绑定事件时,您无需担心多个事件结合。
Pageshow
,因为只有在显示页面时页面高度才具有实际值。这对于照片画廊,旋转木马等插件很重要,基本上都是处理图片的所有内容。
如果您想了解有关网页活动的更多信息,请查看here。此外,您还可以在页面转换之间找到3种不同的传递/存储数据解决方案。