0

我在 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 中),我应该在用户离开页面并在重新加载时重新初始化时关闭,还是让滑块在后台运行

这里最好的做法是什么?

4

1 回答 1

2

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

要使动画页面过渡正常工作,您要从中过渡的页面和向两者过渡的页面都需要位于 DOM 中。但是,将旧页面保留在 DOM 中会很快填满浏览器的内存,并可能导致某些移动浏览器变慢甚至崩溃。

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

多页面模板中的页面完全不受此功能的影响 - 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/

于 2012-04-24T16:22:54.950 回答