当前位置: 首页 > 知识库问答 >
问题:

jQuery Mobile-pageinit vs pageshow

陶英达
2023-03-14

我对jQuery Mobile中pageinit和pageshow方法的用法有点困惑。我知道在初始化期间会调用pageinit,并且每次呈现页面时都会调用pageshow。

我有一个使用<代码>$加载数据的主页。ajax(),用于某些部分。我正在将数据加载到pageinit中。我还仅为pageinit绑定了click和swipe事件。我还注意到,当您从另一个页面返回时,不会调用pageinit。

我还有一个问题,我们使用swipe.js使用轮播-使用pageinit方法时加载不正确,但在page eshoo方法中加载时正常工作。当我们使用浏览器后退按钮时调用pageinit的原因是什么?

此外,缓存在决定加载数据、绑定事件等的逻辑放在哪里方面有任何作用吗?最好有人能解释一下主页数据的加载,然后导航并从另一个页面返回。

共有1个答案

孔运良
2023-03-14

在这里找到的所有信息也可以在我的博客文章中找到,你也可以找到工作示例。

让我们从头开始。正如您已经知道的那样,jQuery开发人员为我们提供了页面事件来弥合文档就绪无法弥补的差距。虽然文档就绪可以告诉您内容已在DOM中就绪,但我们需要更多,因为jQuery Mobile仍然需要增强内容标记(增强内容样式)。

有几个页面事件,每个页面事件都有其目的。有些会在增强页面内容之前触发(如pagebeforecreate),以便添加动态内容。有些仅在页面更改期间触发,如pagebeforechange。

但让我们回到你的问题上来Pageinit是jQuery移动版的文档就绪。虽然您仍然可以使用“文档就绪”(document ready),但在页面事件之间使用相同的替代方案仍然是合乎逻辑的。

正如您已经告诉过的,您正在使用pageinit进行事件绑定(如单击或滑动事件),这是一个很好的解决方案。主要是因为jQuery Mobile遇到了一个称为“多个事件绑定”的问题。例如,如果您将单击事件绑定到一个元素,则没有什么可以阻止另一个单击事件绑定到同一元素。如果您使用page eshoo事件,就会发生这种情况。如果您在page eshoo事件期间使用事件绑定,则每次访问页面时,都会一遍又一遍地绑定相同的事件。它可以很容易地预防,但同样的预防将需要额外的处理器处理能力,与处理其余Web应用程序的能力相同。

这里我们有另一个问题(您的问题之一),那么pageshow的目的是什么?显而易见的答案是使用可用且显示的页面。虽然正确的答案并不重要<代码>页面显示(code>Pageshow)很重要,因为它是唯一可以正确计算页面高度的页面事件,而不是0。现在您可以了解为什么需要在该点初始化旋转木马。像许多其他插件(图表、图像库)一样,旋转木马需要正确的页面高度,如果您在pageshow之前初始化它们,它们的高度将为0,因此它们将存在,但您将无法看到它们。

关于上一个问题,如果应用程序构建正确,缓存不会起作用。首先,您应该始终使用委托事件绑定,因为它不关心页面元素是否存在。基本上,如果您将事件绑定到某个父元素(如文档),那么页面是缓存还是从DOM中删除并不重要。一旦它回来,同样的事件将再次发生。

例子:

$(document).on('click', '#some-button',function(){

});

此方法将click事件绑定到文档,但相同的click事件仅适用于id为“<代码>某些按钮”的元素。该元素是否存在实际上并不重要,因为文档对象将始终存在。

如果您使用普通的网页,而页面重新加载/刷新是一件常见的事情,那么同样的逻辑就不那么重要了。甚至在jQuery Mobile中,如果关闭了ajax,那么每次页面更改基本上都是页面刷新/重新加载。

我希望这能回答你所有的问题。如果你需要澄清,请在评论部分提问。

编辑:

  1. 应在何处加载数据取决于需要加载的内容。如果只想在中执行一次,请使用pageinit。如果每次访问页面时都需要它,那么请使用pagebeforeshow(因为如果使用pageshow,内容会突然出现,会让用户感到困惑)。不要使用pagebeforecreate,因为内容会在活动结束后加载,所以使用它没有意义

如果要在某个时间间隔内加载内容,请使用带有setinterval函数的pageinit。每次添加动态内容时,不要忘记手动增强页面内容样式。

应将Pageinit用于事件绑定和动态内容生成。

 类似资料:
  • 使用jQuery-1.9.1。js和jQueryMobile 1.3.1(Chrome 26/Windows 7)我不明白为什么这些“点击”事件绑定到#一个触发,而另一个没有: 超文本标记语言: JavaScript: 当我在JSFiddle中运行它时,两个事件都会在没有包装在“mobile einit”事件中时触发:http://jsfiddle.net/9NRwa/ 我错过了什么?

  • 本文向大家介绍jQueryMobile之Helloworld与页面切换的方法,包括了jQueryMobile之Helloworld与页面切换的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了使用jQueryMobile实现滑动翻页效果的方法。分享给大家供大家参考。具体分析如下: jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主

  • 问题内容: 我想在带有jquerymobiles按钮的input [type =“ submit”]按钮上使用我的自定义样式,但是它不起作用。我的html代码是: 我的CSS代码是: 当我使用以下html代码时,将应用相同的样式: 问题答案: jQuery Mobile> = 1.4 创建一个自定义类,例如。请注意,要覆盖jQM样式而不使用,应遵循CSS层次结构。或。 一个添加到。自定义类将添加到

  • 我在这个def create中调用redirect_to: 我检查路线= 在我的日志中: 我正在使用Rails 3.2.13 更新 尝试 得到同样的行为。 另外,我尝试通过添加rel=“external”来禁用Ajax,没有任何变化 更新2 new.html.erb 和javascript

  • 本文向大家介绍使用jQueryMobile实现滑动翻页效果的方法,包括了使用jQueryMobile实现滑动翻页效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了使用jQueryMobile实现滑动翻页效果的方法。分享给大家供大家参考。具体分析如下: 滑动手势在移动设备是很流行的,在移动设备中滑动翻页中很常见 虽然这个功能可以在jQueryMobile中实现,但是个人与之前一篇【j

  • 问题内容: 无论如何,是否可以使用Ajax,JavaScript / jQuery从Phonegap移动应用程序从我的OpenCart商店中以JSON格式获取产品目录。OpenCart允许这种事情吗? 任何想法或代码,欢迎:) 问题答案: OcJoy进行的正确,但是提供的解决方案将包含所有页面数据,我猜这不是您所需的输出。 代替他的解决方案,您应该在执行以下操作(假设您只需要产品JSON数组)之前

  • 问题内容: 这是我在做什么的模拟: 在ajax调用返回中,如果我添加了.page()(过去曾用过,但我将其放在页面函数的外面,更改了如何加载页面的逻辑以节省加载时间),则将页面转换为下一页,但我可以看到listview的样式符合我想要的方式: 删除.page()可以解决过渡错误,但是现在页面无法设置样式。我尝试过,甚至没有运气。 关于如何使列表视图刷新的任何想法? 解: 问题答案: 确保调用ul元

  • 问题内容: 我在动态添加选择标签时遇到问题,没有应用CSS和JQM添加的其他html标签。 HTML: JS: 我试过了: 问题答案: 我不知道为什么不起作用,但是对于页面-您可以在元素上使用一次。之后,它将在下一次跳过该元素。 在添加内容之前克隆选择(不带参数的克隆) 取出原件 向克隆的元素添加内容 放回dom 调用或对其进行调用,或调用包含它的元素。 应该有帮助。如果不是,请尝试从头开始创建一