2013-03-30 2 views
0

Я все еще занят попыткой настроить JSON-файл на HTML-сайт. Поэтому, если json изменяет, изменения динамически загружаются в HTML. До сих пор я могу получить контент и даже запросить контент. Но не все, что я хочу, потому что разметка из JSON немного странная.Mustache.js перебирает все массивы

Из-за межсайтовой защиты я не смог выполнить запрос JSOP напрямую, поэтому я решил это с небольшим трюком, который я где-то видел. Я создал test.php, который просто делает:

Таким образом, я обойду защиту кросс-сайта, и все работает хорошо. Проблема только в том, что я не могу перебирать все массивы, которые мне нужны. В настоящее время я использую следующий сценарий для вызова JSOP и получения данных. И выход хорошее описание между <li></li>

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
</head> 
<body> 
    <ul id="episodes"> 
    </ul> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.7.0/mustache.min.js"></script> 
    <script src="http://ps3scenefiles.com/json/handlebars.js"></script> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script id="episodes-template" type="text/template"> 

      <li>{{description}}</li> 

    </script> 
    <script> 
     $(function() { 
      $.getJSON('http://ps3scenefiles.com/json/test.php', function(data) { 
       var template = $('#episodes-template').html(); 
       var info = Mustache.to_html(template, data); 
       $('#episodes').html(info); 
      }); 
     }); 
    </script> 
</body> 
</html> 

Но когда вы открываете ссылку на JSON (http://ps3scenefiles.com/json/test.php), вы видите, что массив Эпизоды имеет другой массив только число. Как я могу создать список как

Episode: 1 
    Id:13605 Active:true Lang:en Link: url 
    Id:16525 Active:true Lang:ru Link: url 
Episode: 2 
    Id:14854 Active:true Lang:en Link: url 
    Id:19445 Active:true Lang:ru Link: url 

Так быть ясно, как я могу сделать усики (или рули) шаблонный, чтобы сделать его похожим на пример?

ответ

0

Вы можете использовать помощника Рули, как указано в this answer

Here is a fiddle без укладки, что выводит данные, которые вы ожидаете (вроде, не все поля).

Вот вспомогательная функция -

Handlebars.registerHelper('eachkeys', function(context, options) { 
    var fn = options.fn, inverse = options.inverse; 
    var ret = ""; 

    var empty = true; 
    for (key in context) { empty = false; break; } 

    if (!empty) { 
    for (key in context) { 
     ret = ret + fn({ 'key': key, 'value': context[key]}); 
    } 
    } else { 
    ret = inverse(this); 
    } 
    return ret; 
}); 
+0

Здравствуйте, спасибо за этот ответ. можете ли вы сказать мне, что мне нужно изменить в этом помощнике, если я хочу перебрать: http://trendico.ru/api/moviebox/get_tv_data?id=1&season=1? Мне все еще нужны одни и те же данные, но кажется, что эпизоды вложены. – Senaxx

+0

Эпизоды кажутся одинакового формата, проверьте это [скрипка] (http://jsfiddle.net/SzAxf/2/). Я просто заменил эпизоды данными из вашей новой ссылки. –

+0

Спасибо. Это означает, что если я использую весь JSON в качестве входных данных, я могу использовать этот шаблон? Я попытался заменить JSON, как на этом скрипте http://jsfiddle.net/SzAxf/3/. Но не повезло :( – Senaxx

Смежные вопросы