0

我在标题栏中有一个导航栏,它被正确初始化和设置样式。我遇到的问题是,当我更改 innerHtml 并调用 elem.navbar() 时,列表项没有设置样式。

这是附加到导航栏 html 的代码

var navbar = this.$(':jqmData(role="navbar")');
navbar.empty().append(this.templateNav(building.toJSON()));
navbar.navbar();

这是我正在使用的模板

<ul>
  <li><a href="#buildings/1/floors/1">1</a></li>
</ul>

我的问题是如何让 jqm 在追加新的 html 后重新计算网格布局并重新设置列表项的样式?

附加到 innerHTML 之前的导航栏

附加到 innerHTML 后的导航栏

4

2 回答 2

0

在不了解templateNavor的情况下building,这似乎对我有用:

buildingJSON对象的样机和templateNav

buildingJson = [
  {"href":"foo.html",
   "title":"One"},
  {"href":"bar.html",
   "title":"Two"}          
]

function templateNav( json ){
  str = "";
  for( i = 0; i < json.length; i++){
    str += '<li><a href="'+json[i].href+'">'+json[i].title+'</a></li>';
  }
  return str;
}

更新navbar

var navbar = this.$(':jqmData(role="navbar") ul');
navbar.empty().append(templateNav(buildingJson));

HTML

<div data-role="navbar">
  <ul>
    <li><a href="a.html">One</a></li>
  </ul>
</div><!-- /navbar -->

我不确定您的代码是什么样的;如果您ul被 a 包裹divdata-role=navbar那么在您使用empty它之后,您需要确保templateNav将结果包裹在 a 中ul,或者更新选择器navbar以包含ul. templateNav在附加之前尝试记录以查看实际附加的内容。

无论如何,navbar.navbar()即使在动态更改 innerHTML 之后,似乎也没有必要。

于 2012-09-21T20:53:33.760 回答
0

从 DOM 中删除导航栏元素。然后重新创建它并触发create事件来处理新 HTML 标记中包含的所有插件的自动初始化。

以下脚本已成功测试:

var navbarparent = $('#navbar').parent();
$('#navbar').remove();
navbarparent.html("<div data-role=\"navbar\"><ul><li><a class=\"nav-li\" href=\"a.html\">Two</a></li><li><a class=\"nav-li\" href=\"a.html\">Three</a></li></ul></div>").trigger('create');

您可以在下面找到一个工作示例:

<!DOCTYPE html> 
<html> 
    <head> 
        <title>Navbar Test</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>
        <script type="text/javascript">
            $(document).on('click', '.nav-li', function(e){
                var navbarparent = $('#navbar').parent();
                $('#navbar').remove();
                navbarparent.html("<div data-role=\"navbar\"><ul><li><a class=\"nav-li\" href=\"a.html\">Two</a></li><li><a class=\"nav-li\" href=\"a.html\">Three</a></li></ul></div>").trigger('create');
                return false;
            });
        </script>
    </head> 

    <body>
        <!-- /page -->
        <div data-role="page">
            <!-- /header -->
            <div data-role="header" data-theme="b">
                <h1>Dynamic Navbar</h1>
            </div>
            <!-- /content -->
            <div data-role="content">
                <div id="navbar" data-role="navbar">
                    <ul>
                        <li><a class="nav-li" href="test.html">One</a></li>
                    </ul>
                </div>
            </div>
        </div>
    </body>
</html>

前: 在此处输入图像描述

后: 在此处输入图像描述

我希望这有帮助。

于 2012-09-21T21:33:41.033 回答