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 中删除某些内容,它也不会从历史记录中删除?
感谢您的帮助,希望我的担忧足够清楚...