位置: 编程技术 - 正文

jQuery Mobile页面返回不需要重新get(jquery mobile 加载页面)

编辑:rootadmin

推荐整理分享jQuery Mobile页面返回不需要重新get(jquery mobile 加载页面),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery mobile app,jquery mobile 加载页面,jquery mobile ui,jQuery Mobile页面如何继承,jQuery Mobile页面如何继承,jquery mobile怎么样,jquery mobile ui,jquery mobile怎么样,内容如对您有帮助,希望把文章链接给更多的朋友!

jQuery Mobile 是用于创建移动 Web 应用的前端开发框架。

jQuery Mobile 可以应用于智能手机与平板电脑。

jQuery Mobile 使用 HTML5 & CSS3 最小的脚本来布局网页。

最近公司的web app项目,使得我有幸一直接触和学习jQuery Mobile。这确实是一个很不错的移动开发库,有助于擅长web开发的工程师,快速入门并构建自己的移动应用。但是在前两天,我碰到了一个问题,使我查了很多资料都没有找到很好的解决方案,最终只能逼着我读jQuery Mobile的源码,再写了个扩展,才得以解决。下面请让我娓娓道来。

问题描述

假设在项目中,有三个页面,分别是main.html、test1.html、test2.html(后面分别简称main、test1、test2),其中main页面是包含一个转向到test1页面的链接(即a标签),test1中有一个属性为data-rel=”back”的链接和一个转向到test2的链接,test2只有一个属性为data-rel=”back”的链接。main转向到test1后,点击back链接返回main(相当于点击浏览器的返回按钮),无需重新发送get请求;但是当test1转向到test2,在test2页面点击back链接想返回test1时,会重新发送一个get请求。这样导致的问题就是:test1做的所有操作,在test2返回后,都会失效。比如A是一个分页的列表页面,翻到第二页后转向到B,那么当返回A后,就无法地位到第二页。

原因分析

我首先用firebug看了一下html的结构,发现jQuery Mobile会把main和test1加入到页面结构中去,当从test1转向到test2后,test1会被自动删除,这样dom树中,只包含了main和test2,所以在test2返回test1就会在发送一个get请求。那么是不是意味着,只要能把历史页面缓存到dom中(就像main和test1一样),就可以解决这个问题。

解决问题

经过一番查找,在jQuery Mobile官网看到一段《Caching pages in the DOM》的描述:

Caching pages in the DOM To keep all previously-visited pages in the DOM, set the domCache option on the page plugin to true, like this:$.mobile.page.prototype.options.domCache = true;Alternatively, to cache just a particular page, you can add the data-dom-cache="true" attribute to the page's container: <div data-role="page" id="cacheMe" data-dom-cache="true">You can also cache a page programmatically like this: pageContainerElement.page({ domCache: true });The drawback of DOM caching is that the DOM can get very large, resulting in slowdowns and memory issues on some devices. If you enable DOM caching, take care to manage the DOM yourself and test thoroughly on a range of devices.

从这段引文中应该可以看到,这三种方法都可以缓存页面到dom中,于是我就使用了第二种方法,即在page的div上增加了data-dom-cache=”true”属性,但是却出现了以下两个问题:

1、如下图所示,当我的访问路径是main->test1->test2->test1(test2是history.back()返回的)时,用firebug可以看到,test2仍然存在于dom中,这样的结果就如红色部分描述的:DOM会变得很大,结果会使页面变慢和一些设备上的内存错误。

jQuery Mobile页面返回不需要重新get(jquery mobile 加载页面)

2、当我存在这样一个页面,它通过不同的参数显示不同的内容,并且页面上,有一段js脚本,会对页面上的元素做些处理,而我们常用的方式就是用id来获得目标元素,由于我们是用了cache缓存page,就会导致js事件或者操作混乱。比如在这里我增加了一个test1_1页面,它的内容几乎和test1一样,他们都有相同id的div和相同事件处理的button,这个事件做的事情就是往这个div中增加内容,当访问路径为main->test1->test1_1,在test1_1上点击按钮,会发现好像没有触发这个事件,其实它已经触发了,只是内容增加到test1中的div中了,分别入下图

所以对于目前大多数应用,这个方案是不可取的,除非自己管理dom中页面的生命周期。

优化方案

通过上面的实验,我也知道了需要满足我的需求,就只能自己管理dom中页面的生命周期了。那么就涉及到一个问题:页面什么时候过期(即从dom中删除)呢?根据我的需求,当从test2返回到test1时,就应该从dom中删除test2,同理从test1返回main时,从dom中删除test1。如果再次从main导航到test1,就得发起一个get请求,我认为这是合理的,因为用户不会认为点击链接到新页面还需要缓存。所以我应该在页面显示前或者显示后,删除它之后的history,于是我就在pagebeforeshow、pageshow的时候做了删除操作,即如下脚本(插件形式):

结果事与愿违,在页面返回时,出现了js脚本错误,如下图:

那么是什么原因呢?不在这个事件里做处理,那在哪里处理呢?于是我仔细研读了一下jQuery Mobile源码,发现了下面一段:

页面在切换完后,会触发pagechange事件,于是我把pagebeforeshow改成了pagechange,一切都按预期运行,并且没有错误,终于大功告成了。

总结

在使用该插件时,请注意以下几点:

1、必须在引用该脚本之前,引用jquery和jquery mobile脚本文件;

2、必须在page上增加data-dom-cache="true"。

以上所述是小编给大家介绍的jQuery Mobile页面返回不需要重新get 的相关说明,希望对大家有所帮助!

JQuery插件Marquee.js实现无缝滚动效果 Marquee.js插件提供了许多属性选项,您可以配置定制外观和效果。{yScroll:"top"//初始滚动方向(还可以是"top"或"bottom")

jQuery siblings()用法实例详解 siblings()获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的。jQuery的遍历方法siblings()$("给定元素").siblings(".selected")其作用是筛选给定的同胞

无需 Flash 使用 jQuery 复制文字到剪贴板 如果在网上找一个关于如何将一段特定的文本拷贝到剪贴板的解决方案,最可能的结果就是使用Flash的方案来做这个事,虽然使用Flash可以很好地解决这

标签: jquery mobile 加载页面

本文链接地址:https://www.jiuchutong.com/biancheng/384981.html 转载请保留说明!

上一篇:jQuery 中的 DOM 操作(jquerydom操作)

下一篇:JQuery插件Marquee.js实现无缝滚动效果(jQuery插件是什么)

  • 怎么知道交不交印花税
  • 小规模纳税人企业所得税计算
  • 购买土地税率是多少
  • 个人出租汽车
  • 附加税减半征收的条件
  • 装修消防费用摊销几年
  • 企业资产永久或实质性损害如何进行所得税处理
  • 非福利企业残疾人用工优惠
  • 金税盘到期了
  • 支付员工经济补贴怎么算
  • 房地产企业城建税预缴可以抵扣吗
  • 租赁公司运输费计入什么科目
  • 公司从事房地产有什么好名字
  • 股权取得
  • 在天猫店铺后台中的提现怎么做会计分录?
  • 项目自筹资金是什么意思
  • 以前的员工怎么交社保
  • 注销税务登记后多久注销工商登记
  • 普通发票没有进账怎么办
  • 资产评估报告包括
  • 苹果桌面小工具怎么设置
  • 小规模开普票后怎么报增值税
  • ezulumain.exe是病毒进程吗 ezulumain进程安全吗
  • PHP:stream_socket_pair()的用法_Stream函数
  • 公司处于亏损状态,股东要退股怎么办
  • 艾灸的好处与功效女人
  • 工程完工后的质保金怎么入账
  • php5 mysql教程
  • 固定资产折旧怎么做账务处理
  • 集团内部资金拆借利息增值税
  • 库存现金账务处理案例
  • 智能驾驶adas概念股龙头
  • 固定资产处置的三种方式
  • tsar命令 收集服务器系统信息
  • 红字信息表重复了怎么办
  • 质保金如果以后可以退吗
  • 跨年发票可以作为税前扣除的时限
  • 织梦模板改成帝国模板
  • 投资回收期计算公式例题
  • 无偿赠送怎么做账
  • 售后服务费计提政策
  • 新会计制度对会计人员的影响
  • 出口报关单运费单位怎么填
  • 专票和普票都是13个点嘛
  • 预收账款和应收账款的转换
  • 同在一个单位
  • 甲企业持有乙企业40%的股权,能够对乙企业
  • 收到预付卡的发票是否可以报销呢?
  • 存货盘盈的账务处理入什么费用
  • 应交税金等于销项减进项吗
  • 工业企业外购存货成本有
  • 新成立公司季初资产总额是填1
  • 领用材料属于什么费用
  • 分页存储过程的实现
  • xp系统怎么升级版本
  • xp系统强制删除文件
  • wp8.0升级8.1
  • winpe安装
  • linux修改计算机主机名和用户名
  • xp系统如何打开控制面板
  • shnlog.exe - shnlog是什么进程 有什么用
  • win10红石版
  • win10系统怎么设置最好
  • w10怎么创建此电脑
  • windows8.1使用指南
  • 怎么更换win系统
  • linux服务器安全配置
  • Jquery ajax基础教程
  • android 游戏平台
  • shell脚本传参数给命令
  • [置顶]bilinovel
  • js 进阶
  • python 文件操作,读,写,指定位置
  • js设计模式有哪些
  • jQuery中通过ajax调用webservice传递数组参数的问题实例详解
  • 北京孩子社保网上怎么缴费
  • 党费的缴纳是否扣除所得税
  • 贵州省增值税普通发票图片
  • 增值税普票十万怎么开
  • 企业卖旧房如何计算缴纳土地增值税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设