【问题标题】:should I unbind events/plugins when leaving a page in Jquery Mobile/Jquery?在 Jquery Mobile/Jquery 中离开页面时,我应该取消绑定事件/插件吗?
【发布时间】:2012-04-24 14:41:01
【问题描述】:

我在一个 Jquery Mobile 网站中使用了一堆插件,并且正在寻找在我离开页面后“清理”的最佳方式,该页面保留在 DOM 中。

问题是,当页面被拉回视图时,我应该尝试取消绑定/关闭/取消委托插件绑定并重新初始化,还是应该在用户在另一个页面上时让所有内容“在后台”运行?

无论如何,如果我要设置这样的插件,最好的方法是什么:

 // example using flexslider plugin
 $('div:jqmData(role="page").basePage').on('pagecreate.flexslider', function() {    

      // make sure this fires only once when pagecreates fires more often
      if ( $('.flexslider').length > 0 && $('.flexslider').jqmData('bound') != true ) {
          // lock           
          $('.flexslider').jqmData('bound',true);
          $('.flexslider').flexslider({ 
                    animation: "slide", 
                    controlsContainer: $(".flex-container")
                    }); 
          } 
      });

问题:
假设这是我的 Jquery Mobile 锚页面(始终停留在 DOM 中),当用户离开页面并在重新加载时重新初始化时我应该 关闭 还是让滑块在后台运行?

这里最好的做法是什么?

【问题讨论】:

    标签: jquery jquery-plugins jquery-mobile event-handling


    【解决方案1】:

    当您离开通过 AJAX 引入 DOM 的页面时,jQuery Mobile 会自动从 DOM 中删除该页面,包括它的后代及其所有事件处理程序/数据。

    要使动画页面过渡生效,您正在过渡的页面 from 和 to 都需要在 DOM 中。但是,保留旧页面 DOM 会迅速填满浏览器的内存,并可能导致一些移动 浏览器速度变慢甚至崩溃。

    因此,jQuery Mobile 有一个简单的机制来保持 DOM 整洁。 每当它通过 Ajax 加载页面时,jQuery Mobile 都会将该页面标记为 当您稍后离开 DOM 时从 DOM 中移除 (从技术上讲,在 pagehide 事件中)。如果您重新访问已删除的页面, 浏览器可能能够从它的 缓存。如果没有,它会从服务器重新获取文件。 (如果是 嵌套列表视图,jQuery Mobile 删除所有组成的页面 导航到不属于 列表。)

    多页面模板中的页面不受此功能的影响 all - jQuery Mobile 只删除通过 Ajax 加载的页面。

    来源:http://jquerymobile.com/demos/1.1.0/docs/pages/page-cache.html

    .

    jQuery Mobile 内部使用.remove():

    .empty() 类似,.remove() 方法将元素从 DOM。 .remove() 当你想删除元素本身时,也可以使用 作为里面的一切。除了元素本身,所有 与元素关联的绑定事件和 jQuery 数据被移除。

    来源:http://api.jquery.com/remove/

    【讨论】:

    • 有时我将页面保存在 DOM 中。对于那种情况,我正在寻找某种“清洁剂”
    • @frequent .remove() 是你的朋友。我还将删除对您使用 .remove() 的元素的任何 JS 引用。喜欢:var $image = $('#my-img');
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多