1

jqm 上的这个历史事件让我发疯......每次我认为我有解决方案时,它都会从我的掌握中滑落。

事情是这样的:我正在开发一个动态生成的内容应用程序。这些页面是从 JSON 文件生成并使用 jsRender 呈现的。它们在第一个请求时被加载到 DOM 中(我为此使用了 jqm 多页模板),然后,在下面,它们被简单地使用指向该 #id 的 changePage 调用(我从中获得灵感的模型是这个: http: //jquerymobile.com/test/docs/pages/page-dynamic.html)。一切正常,但一段时间后 DOM 变得过于拥挤并减慢了我的系统(尤其是我加载应用程序的智能手机)。解决方案是在用户离开页面后立即取消页面,就像在这个项目中一样: http ://roughlybrilliant.com/jsrender_json_apis_and_jquery_mobile

它使用

$.mobile._bindPageRemove

操作说明。无论如何,我第一次尝试是使用 jQuery 提供的 .remove() 指令,而不是使用它:

$("#" + entity.name + "-" + entityId).bind('pagehide', 
     function() {
         $(this).remove();
     });

因此,无论何时隐藏页面,它都会从 DOM 中删除。因此,假设我们在我的页面中点击了一个链接以转到另一个,起始页面被删除并加载新页面。这里我有一个后退按钮,所以当我点击它时,它会让我回到刚刚删除的页面上一步。现在在我的代码中,我有一个函数可以再次构建页面并显示它。只是为了大致了解我的应用程序是如何工作的。

现在假设我可以在我的链接树中更深一层:假设我在 lvl 2 并转到 lvl 3 然后回到 2。在这种情况下,lvl 2 页面没有后退按钮,即使在代码中我将其设置为存在。

这是 jsRender 中的模板:

<script id="header-buttons" type="text/x-jquery-tmpl">
    <div data-role="header" data-position="inline" data-backbtn="true">
    <h1>{{:name}}</h1>
    <a href="#root" class="ui-btn-right" data-icon="home">Home</a>
    </div>
</script>

我认为这是因为删除指令(或 $.mobile._bindPageRemove)也在从历史记录中删除页面。所以我更改并使用 empty() 指令来清空 div,然后用什么重新填充它我需要...没有成功。如果我在访问后删除页面,我只能返回树中的 1 级。

我的目标是绕过我的应用程序动态加载页面,一旦我离开它们,我只想在不改变历史记录的情况下将它们从 DOM 中删除,所以当我返回并重新加载页面时,我总是可以使用后退按钮这页纸。

所以我的问题是:历史在 jqm 中是如何运作的?当 jqm 用它的代码增强页面时,它是否会为它应该指向哪个页面的后退按钮添加任何指示?如何强制页面显示后退按钮并指向历史记录中的上一个元素?是否有可能如果我从 DOM 中删除某些内容,它也不会从历史记录中删除?

感谢您的帮助,希望我的担忧足够清楚...

4

2 回答 2

0

在页面所需的单独 js 文件中设置以下命令。

$.mobile.page.prototype.options.domCache = false;

这样做基本上不会将旧页面缓存到 DOM 中。

祝你好运!

于 2012-05-25T03:12:15.073 回答
0

好的,我已经以类似于乔纳森建议我的方式解决了这个问题。

我创建了一个单独的堆栈,用于跟踪我访问过的页面及其 URL。然后,通过一个辅助函数,我检查这个堆栈并创建一个向后指向的按钮。因此,如果堆栈的最后一个条目是活动页面,则倒数第二个将是我用后退按钮指向的那个。

希望有帮助!

于 2012-06-07T09:42:42.000 回答