2014-08-27 71 views
0

我正在用Mustache js的幫助下構建一個網站。頂部導航中有相當多的數據。鬍子js - 導航模板有時不加載

的問題是,當我加載的HTML大約一半的時間,導航未加載/缺少-The輸出是一個空div:

<div id="nav"> </div> 

下面是HTML代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Title</title> 
    <script type="text/javascript" src="js/lib/jquery-1.11.1.min.js"></script> 
    <script type="text/javascript" src="js/lib/mustache.js"></script> 
    <script type="text/javascript" src="js/templates.js"></script> 
    <script type="text/javascript" src="js/main.js"></script> 
    <link rel="stylesheet" href="css/style.css" type="text/css" media="all" /> 
</head> 
<body id="productPage"> 
<div id="header"> 
    {{{header}}} 
    <div id="nav"> 
     {{{nav}}} 
    </div> 
</div> 
... 
... 
... 

這裏是模板:

var Templates = { 
    'header':   '<div id="headerWrapper">' + 
         '<div id="logo" class="left"><img src="images/logo.png" /></div>'+ 
         '<div class="right">'+ 
          '<div class="search"></div>'+ 
          '<div class="login">Login</div>'+ 
         '</div>' + 
         '<ul class="user_type">'+ 
          '{{#user_type_list}}'+ 
          '<li><a href="{{user_type_element_link}}">{{user_type_element_text}}</a></li>'+ 
          '{{/user_type_list}}'+ 
         '</ul>'+ 
         '<div id="menuWrapper" class="clearfix"></div>' + 
          '<div class="clearfix"></div> ' + 
         '</div>', 
'nav':    '<ul id="menu">' + 
         '{{#menu_links}}' + 
         '<li class="menu_top" id="{{menu_id}}">' + 
          '<a href="{{menu_link}}">{{menu_text}}</a>' + 
          '<div class="menu_content"></div>' + 
         '</li>' + 
         '{{/menu_links}}' + 
        '</ul>', 
'products_services': '<div class="submenu">' + 
         '<ul class="top_list left">' + 
          '{{#top_list}}' + 
          '<li class="top_list_elem">' + 
           '<a href="{{top_list_link}}">{{top_list_text}}</a>' + 
           '<div class="extraInfo">' + 
            '<div class="categories">' + 
             '<ul>' + 
              '{{#categories}}' + 
              '<li class="category">' + 
               '<div class="cat_name">{{category_name}}</div>' + 
               '<ul class="subcategories">' + 
                '{{#subcategories}}' + 
                '<li class="sub_category"><a href="{{subcategory_link}}">{{subcategory_name}}</a></li>' + 
                '{{/subcategories}}' + 
               '</ul>' + 
              '</li>' + 
              '{{/categories}}' + 
             '</ul>' + 
            '</div>' + 
            '<div class="teasers">' + 
             '{{#teasers}}' + 
             '<div class="teaser">' + 
              '<a href="{{teaser_link}}">' + 
               '<img src="images/nav_teaser.jpg"/>' + 
              '</a>' + 
              '<div class="caption">' + 
               '<a href="{{teaser_link}}">{{teaser_caption}}</a>' + 
              '</div>' + 
             '</div>' + 
             '{{/teasers}}' + 
            '</div>' + 
           '</div>'+ 
          '</li>' + 
          '{{/top_list}}' + 
         '</ul>' + 
         '{{#appointment}}' + 
          '<div class="right"><a href="#">Appointment</a></div>' + 
         '{{/appointment}}' + 
        '</div>', 
'footer':   '<div id="footerWrapper" class="clearfix">' + 
         '<ul>' + 
         '{{#footer_list}}' + 
          '<li>' + 
           '<div class="title">{{footer_title}}' + 
           '</div>' + 
           '<ul>' + 
           '{{#footer_sub_list}}' + 
            '<li>' + 
             '<a href="{{footer_sub_link}}" class="{{footer_sub_link_class}}">' + 
             '{{footer_sub_link_title}}' + 
             '</a>' + 
            '</li>' + 
           '{{/footer_sub_list}}' + 
           '</ul>' + 
          '</li>' + 
         '{{/footer_list}}' + 
         '</ul>' + 
        '</div>' 

}

這是主要的JS:

jQuery(document).ready(function($){ 
$.templates = function(page) 
{ 
    var plugin = this; 
    var mustache; 
    plugin.init = function() { 
     getHeader(); 
     getNav(); 
     getFooter(); 
    } 

    var getHeader = function(){ 
     ... 
    }; 

    var getNav = function(){ 
     var template = Templates.nav; 
     var pages = ["products_services"]; 
     // setTimeout(function() { 

      $.ajax({ 
       type: "GET", 
       url: "data/menu.json", 
       dataType: "JSON", 
       success: function(data) { 
        $('#menuWrapper').html(Mustache.render(template, data)); 

        $.each(pages, function(key, val){ 
         var template = Templates[val]; 
         $.ajax({ 
          type: "GET", 
          url: "data/"+val+".json", 
          dataType: "JSON", 
          success: function(data) { 
           var html = Mustache.render(template, data); 
           var menuContent = $('#'+val).find('.menu_content'); 
           menuContent.html(html); 
           menuContent.find('.top_list_elem').bind('mouseenter', function(){ 
            var categories = $(this).find('.categories'); 
            var teasers = $(this).find('.teasers'); 
            var categoriesH = categories.outerHeight(true); 
            var teasersH = teasers.outerHeight(); 
            var height; 
            if((categories.width() + teasers.width()) > $(window).width()) 
             height = categoriesH + teasersH; 
            else 
             height = Math.max(categoriesH, teasersH); 
            menuContent.height(height + 50); 
           }); 
           menuContent.bind('mouseleave', function(){ 
            $(this).height(''); 
           }); 
          } 
         }); 
        }); 
       } 
      })/*;},30)*/; 
    }; 


    var getFooter = function(){ 
     ... 
    }; 

    plugin.init(); 
} 
$.fn.templates = function(page) 
{ 
    return this.each(function() 
    { 
     if (undefined == $(this).data('templates')) 
     { 
      var plugin = new $.templates(page); 
      $(this).data('templates', plugin); 
     } 
    }); 
} 
var body = $('body'); 
var page = body.attr('id'); 
body.templates(page); 

}); 

如果與任何幫助....:如果我再補充一點註釋掉了它的工作原理,但是當我模擬一個緩慢的互聯網連接,問題超時功能仍然存在..

的JSON文件:

menu.json:

{ 
"menu_links": [ 
    { 
     "menu_link": "#", 
     "menu_text": "link1", 
     "menu_id": "link1" 
    }, 
    { 
     "menu_link": "#", 
     "menu_text": "link2", 
     "menu_id": "link2" 
    }, 
    { 
     "menu_link": "#", 
     "menu_text": "link3", 
     "menu_id": "link3" 
    }, 
    { 
     "menu_link": "#", 
     "menu_text": "link4", 
     "menu_id": "link4" 
    } 

] 
} 

products_service s.json很長,所以這裏是一個片段:

{ 
"top_list": [ 
    { 
     "top_list_link": "#", 
     "top_list_text": "Top List Text", 
     "categories": [ 
      { 
       "category_name": "Name", 
       "subcategories": [ 
        { 
         "subcategory_link": "#", 
         "subcategory_name": "Subcategory name 1" 
        }, 
        { 
         "subcategory_link": "#", 
         "subcategory_name": "Subcategory name 1" 
        }, 
        { 
         "subcategory_link": "#", 
         "subcategory_name": "Subcategory name 1" 
        }, 
        { 
         "subcategory_link": "#", 
         "subcategory_name": "Subcategory name 1" 
        }, 
        { 
         "subcategory_link": "#", 
         "subcategory_name": "Subcategory name 1" 
         ... 
      ... 

我希望我提供了足夠的信息。 非常感謝您提前給出答案!

回答

0

我們使用javascript對象而不是json加載數據並且它可以工作...