0

ヘッダー バーにナビゲーション バーがあり、正しく初期化され、スタイルが設定されます。私が抱えている問題は、innerHtml を変更して elem.navbar() を呼び出すと、リスト項目のスタイルが設定されないことです。

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>

私の質問は、新しい html を追加した後に jqm にグリッド レイアウトを再計算させ、リスト項目のスタイルを再設定させるにはどうすればよいですか?

innerHTML に追加する前の Navbar

innerHTML に追加した後の Navbar

4

2 に答える 2

0

DOM から navbar 要素を削除します。その後、再作成し、作成イベントをトリガーして、新しい 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 に答える
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 -->

あなたのコードがどのように見えるかわかりません。あなたがwithでulラップされている場合は、結果を でラップするか、 のセレクターを更新してを含める必要があります。追加する前にログを記録して、実際に何が追加されているかを確認してください。divdata-role=navbaremptytemplateNavulnavbarultemplateNav

とにかく、navbar.navbar()innerHTML を動的に変更した後でも、必要ないようです。

于 2012-09-21T20:53:33.760 に答える