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,当它按预期工作时会感到惊喜。