Jquery Mobile嵌套列表 – 后退按钮消失了?
在jQuery Mobile的最新版本中,添加后退按钮的方法是在整个“页面”div中添加“data-add-back-btn =”true“’。
这很好用。 但是,查看嵌套列表子菜单时,后退按钮不再存在。
通过查看输出代码,似乎发生了什么,jquery mobile隐藏了原始的“page”div,并创建了一个新的(没有将后退按钮属性设置为true)。
我目前没有演示url,但您可以在演示页面http://jquerymobile.com/test/docs/lists/lists-nested.html查看问题。
我的问题是,我需要添加一些内容,它会告诉它为嵌套菜单添加一个后退按钮吗? 如果没有,有什么方法可以破解它自动将后退按钮属性添加到所有“页面”div?
感谢任何有关此问题的帮助。
这样的事情应该有所帮助:
$(':jqmData(url^=MYPAGEID)').live('pagebeforecreate', function(event) { $(this).filter(':jqmData(url*=ui-page)').find(':jqmData(role=header)') .prepend('Back') });
将MYPAGEID
替换为包含列表的页面的ID。
在动态创建子页面时将触发该事件,并将后退按钮作为标题中的第一项插入。 然后,当jQueryMobile魔术随后自动运行时,它将被拾取并变得很好。
过滤有点奇怪,因为你不能在第一个选择器中引用ui-page
(它在data-url
偶然发现&
,并且看起来你不能在.live()
之前使用filter)没有这个额外过滤您也可以在父页面上获得后退按钮。
有同样的问题,这是一个解决方案:
由于后退按钮现在默认关闭,您需要在加载jQuery mobile之前(以及加载jQuery之后)将其打开:
现在,由于jQuery的后退按钮本身就是错误的,你有时会看到它出现在它不应该的位置。 要防止这种情况,请将以下内容添加到页面容器中:
data-add-back-btn="false"
这将防止后退按钮被页面刷新混淆并显示它不应该出现的位置。
从上面发布的示例中获取提示,这就是我能够将Back按钮添加到嵌套列表的方式。
我正在做的是在存在某些条件时可选地添加父listview(),然后仅在某些数据可用时添加子listview()。
根据具体情况,我可以有0到5个孩子的列表视图。
例如:
self.cont.append($("
")); self.loadMeds(self.cont.attr("id")); self.loadContacts(self.cont.attr("id")); self.loadDX(self.cont.attr("id")); $.mobile.page.prototype.options.addBackBtn = true;
self.cont只是我附加jQuery对象的页面上的DIV。
每个.loadXXX方法看起来基本如下:
self.loadMeds = function (client_id) { if (!$("#clientMeds").exists()) { cw.ds.executeSQL("SELECT * FROM CLIENTS_MEDS WHERE client_id = ?", [client_id], self.appendMeds); }; }; self.appendMeds = function (tx, r) { var $meds = $("Medications "); var $medlist = $("
"); var rs, meds, med = ""; var m = 0; if (r.rows.length > 0) { for (var i = 0; i < r.rows.length; i++) { rs = r.rows.item(i); meds = rs.data.split("\n"); for (var j = 0; j < meds.length; j++) { med = med + meds[j] + "
"; if (m == 2) { $medlist.append($("" + med + " ")); med = ""; m = -1; }; m++; }; }; }; $meds.append($medlist); var $m = $("
").append($meds); $("#addtlInfo").append($("").append($m)); $("#clientMeds").listview(); };
如您所见,一旦我附加每个子列表,我调用listview()方法。 这导致父列表视图具有单独的子列表视图。
问题是,如果我点击父listview()中的任何项目,我可以按预期查看子项,但无法返回到父列表视图。 当我在iPad上测试我的代码时,这确实成了一个问题(因为没有原生的BACK按钮。@ Droid上有一个实际的后退按钮)。
当我尝试第一个修复:data-add-back-btn =“true”时,这没有按预期工作。
第二个修复;
因为它是页面宽度,所以对我来说似乎不优雅。 我只想实现这个设置,如果实际上是一个嵌套的listview,当它按预期工作时会感到惊喜。