Создать HTML-страницу с JS из JSON - PullRequest
8 голосов
/ 09 марта 2012

Я ищу очень простой пример использования Javascript для анализа JSON-файла и вывода html-файла или заполнения html-файла.Все примеры, которые я нашел до сих пор, содержат фрагменты кода, и у меня нет фона, чтобы заполнить пробелы между ними.

Спасибо за любые скрипки (что было бы здорово), ссылки и умные комментарии.

Ответы [ 5 ]

14 голосов
/ 09 марта 2012

Вы можете использовать библиотеку микротемплирования, такую ​​как Усы , для анализа входящих объектов JSON в фрагменты HTML с использованием синтаксиса шаблона {{ key }}.Если ваш объект выглядит следующим образом:

var myObj = {
    name: 'Joe Smith',
    age: 25,
    features: {
        hairColor: 'red',
        eyeColor: 'blue'
    }
};

Используя Усы, вы можете легко преобразовать его в HTML, используя {{#}} и {{/}} для обхода вложенных объектов:

Mustache.render('Hello, my name is {{name}} and I am {{age}} years old. {{#features}} I have {{hairColor}} hair and {{eyeColor}} eyes.{{/features}}', myObj);

который выводит:

Здравствуйте, меня зовут Джо Смит и мне 25 лет.У меня рыжие волосы и голубые глаза.

РЕДАКТИРОВАТЬ: более уместное приложение - динамически генерировать панель управления, используя шаблон с вложенными списками объектов.Вот мой шаблон и объект (HTML разбит на список и объединен для ясности):

var panel = [
  '<div id="cpanel">',
    '{{#cpanel}}',
      '<div class="panel_section">',
        '<h1 class="cpanel">{{name}}</h1>',
        '<p>',
          '{{#content}}',
            '<button id="{{id}}">{{id}}</button>',
          '{{/content}}',
        '</p>',
      '</div>',
    '{{/cpanel}}',
  '</div>',
].join('\n');

var panelObj = {
  cpanel: [
  {
    name: 'playback',
    content: [
      {id: 'play'},
      {id: 'pause'},
      {id: 'stop'}
    ]
  }, {
    name: 'zoom',
    content: [
      {id: 'zoomIn'},
      {id: 'zoomOut'}
    ]
  }]
};

Затем вы визуализируете с усами:

Mustache.render(panel, panelObj);

, который выдает:

<div id="cpanel">
  <div class="panel_section">
    <h1 class="cpanel">playback</h1>
    <p>
      <button id="play">play</button>
      <button id="pause">pause</button>
      <button id="stop">stop</button>
    </p>
  </div>
  <div class="panel_section">
    <h1 class="cpanel">zoom</h1>
    <p>
      <button id="zoomIn">zoomIn</button>
      <button id="zoomOut">zoomOut</button>
    </p>
  </div>
</div>
14 голосов
/ 09 марта 2012

Пример шаблонов

Я бы предложил один из инструментов шаблонов, например PURE ...

Целью такого инструмента является разделение логики и представления.

Например, создание списка из данных JSON с использованием упомянутого инструмента будет выглядеть следующим образом:

Файл данных JSON

{'who':'BeeBole!'}

HTMLfile

<html>

<head>
  <title>PURE Unobtrusive Rendering Engine</title>

  <script src="../libs/jquery.js"></script>
  <script src="../libs/pure.js"></script>
</head>

<body>
  <!-- the HTML template -->
  Hello <a class="who" href="#"></a>

  <script>
    // the JSON data we want to render
    $.getJSON('yourJSONdataFile.json', function(data) {
        // run the rendering
        $('a').autoRender(data);
        // PURE tries to match class with the JSON property and replace the node value with the value of the JSON property
    });
  </script>
</body>
</html>

Это наиболее базовый подход, подходящий, если у вас есть простые данные JSON (см. рабочий пример JSFiddle там ) .. Get Started руководство будетрассмотрим другой пример, если базовый подход не подходит.Для получения более подробной информации см. Документацию .

Альтернативы

Не было особой причины, по которой PURE использовался в приведенном выше примере.У вас есть много альтернатив:

..или вы можете сделать это вручную, как объяснено там .

3 голосов
/ 07 октября 2012

Возможно, вы захотите взглянуть на jQuery.dForm . Это помогает создавать HTML и формы динамически, используя JSON.

2 голосов
/ 09 марта 2012

Итак, я предполагаю, что вы имеете в виду, что ваш JSON содержит строку HTML внутри него.

Допустим, что ваш JSON:следующим образом:

    <html>
    <head>

    var myjson = {"htmlString" : "<div> now thats smart! </div>"}

    <script type="text/javascript">

    function loadHTML() {

    document.getElementByTagName("body").innerHTML(myjson["htmlString"]);

    }

    </script>
</head>
<body onload='loadHTML()'>
</body>
</html>

Обратите внимание, что вы также можете использовать AJAX для извлечения JSON и его рендеринга, однако обратите внимание, что встраивание HTML-кода в JSON при транспортировке с сервера считается уязвимостью безопасности.Вместо этого вы можете получить частичный HTML с сервера напрямую, используя AJAX, а затем заменить части этого HTML (шаблона) на динамические значения, используя javascrip и REST / SOA

, надеюсь, это поможет

0 голосов
/ 19 февраля 2015

EJS или встроенный Java-скрипт, который приятен и забавен.Вы можете использовать внешний интерфейс, такой как магистраль или React Facebook, который является более сложным.Есть несколько хороших видеоуроков на уроке CodeChool для EJS.Вот пример

  var foo = {'city':'SF', 'party':'now'}

с EJS просто:

   <div> <p> going to <%= foo.city %> to party <%= foo.party %> </p></div>

, чтобы получить текст: «идти на вечеринку сейчас»

С EJS,или мой любимый PEJS вы можете сделать, если, переключитесь, на (), Дата () ..... вы получите точку.Ищите здесь Pejs , а также читайте EJS .Много классных вещей, которые вы можете сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...