gpt4 book ai didi

javascript - jQuery Mobile - pageinit 与 pageshow

转载 作者:数据小太阳 更新时间:2023-10-29 04:22:37 25 4
gpt4 key购买 nike

我对 pageinit 的用法有点困惑和 pageshow jQuery Mobile 中的方法。我知道pageinit在初始化和 pageshow 期间调用每次渲染页面时都会调用。
我有一个使用 $.ajax() 加载数据的主页对于某些部分。我正在加载 pageinit 中的数据.我还绑定(bind)了 pageinit 的点击和滑动事件只要。我也注意到 pageinit从另一个页面返回时不会调用。
我还有一个问题,我们使用 swipe.js 使用轮播。 - 使用 pageinit 时无法正确加载方法,但在加载时工作正常 pageshow方法。 pageinit 的原因可能是什么当我们使用浏览器后退按钮时被调用?
此外,缓存在决定加载数据、绑定(bind)事件等逻辑的位置方面是否有任何作用?如果有人可以解释说加载主页数据,然后导航并从另一个页面返回,那将是最好的。

最佳答案

介绍
在这里找到的所有信息也可以在我的博客中找到 ARTICLE ,您还将找到工作示例。
pageinit 和 pageshow 的区别
让我们从头开始。如您所知,jQuery 开发人员为我们提供了页面事件以弥补文档就绪无法满足的差距。虽然文档就绪可以告诉您内容已在 DOM 中准备就绪,但我们还需要更多,因为 jQuery Mobile 仍然需要增强内容标记(增强内容样式)。
several页面事件,每个事件都有其目的。有些会在增强页面内容之前触发(例如 pagebeforecreate ),以便可以添加动态内容。有些只会在页面更改时触发,例如 pagebeforechange .
但是让我们回到你的问题。 Pageinit 这里是 的 jQuery Mobile 版本document ready .虽然您仍然可以使用 document ready 在页面事件之间有相同的选择仍然是合乎逻辑的。
正如您已经说过的,您正在使用 pageinit 对于事件绑定(bind)(如单击或滑动事件),这是一个很好的解决方案。主要是因为 jQuery Mobile 遭受称为“多事件绑定(bind)”的问题。如果例如你有一个点击事件绑定(bind)到一个元素,没有什么可以阻止另一个点击事件绑定(bind)到同一个元素。如果你使用 就会发生这种情况pageshow 事件。如果您在 期间使用事件绑定(bind)pageshow 事件,每次访问页面时,都会一遍又一遍地绑定(bind)相同的事件。它很容易被阻止,但同样的预防将需要额外的处理器处理能力,同样的能力可以用来处理 Web 应用程序的其余部分。
这里我们还有一个问题(你的一个问题),那么 的目的是什么? pageshow ?显而易见的答案是对可用的和显示的页面做一些事情。虽然正确答案并不那么重要。 Pageshow 很重要,因为它是唯一可以正确计算页面高度并且它不是 0 的页面事件。现在您可以看到为什么您的轮播需要在此时初始化。像许多其他插件(图表、图片库)一样,轮播需要正确的页面高度,如果你在 之前初始化它们pageshow 它们的高度为 0,因此它们会存在,但您将无法看到它们。
关于您的最后一个问题,如果您的应用程序构建正确,则缓存不起作用。首先,您应该始终使用委托(delegate)事件绑定(bind),因为它不会关心页面元素是否存在。基本上,如果您将事件绑定(bind)到某个父元素(如文档),则页面是否被缓存或从 DOM 中删除都无关紧要。一旦它回来,同样的事件将再次起作用。
例子:

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

});
此方法会将点击事件绑定(bind)到文档,但相同的点击事件仅适用于 ID 为“ ”的元素。 some-button' .该元素是否存在并不重要,因为文档对象将始终存在。
如果您使用普通网页,并且页面重新加载/刷新是常见的事情,那么相同的逻辑就不是那么重要了。或者甚至在这里使用 jQuery Mobile 如果 ajax 关闭,那么每个页面更改基本上都是页面刷新/重新加载。
我希望这能回答你所有的问题。如果您需要澄清,请在评论部分询问他们。
编辑:
  • 您应该在哪里加载数据取决于您需要加载什么。如果您只想执行一次,请使用 pageinit .如果每次访问页面时都需要它,请使用 pagebeforeshow (因为如果你使用 pageshow 内容会突然出现,它会迷惑用户)。请勿使用 pagebeforecreate 因为内容会在事件结束后加载,所以没有必要使用它。

  • 如果您想以某个时间间隔加载内容,请使用 pageinit 带有 setinterval 功能。别忘了 manually enhance每次添加动态内容时的页面内容样式。
  • Pageshow 仅在插件初始化时有用,需要页面高度。其他没有什么特别的。从答案 1 中,您可以看到它对动态内容不利,因为它会无处不在。

  • Pageinit 应该用于事件绑定(bind)和动态内容生成。
  • 明天我会更新我的 answer 每个页面事件的用例。我希望这对你来说已经足够了。
  • 关于javascript - jQuery Mobile - pageinit 与 pageshow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751875/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com