усы js - невозможно получить доступ к значению массива с помощью таблиц

У меня возникла проблема с доступом Mustache.js к значениям массива json, и мне нужна помощь.

Проблема в том, что я хочу получить доступ к значениям с помощью таблицы. Он всегда показывает [object Object], когда должен отображать содержимое массива.

Ниже приведен рабочий и нерабочий пример:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://raw.github.com/janl/mustache.js/0.7.2/mustache.js"></script>
</head>
<body>
<div id="template" style="display:none">
  <p>Works but not what I need:</p>
  <p>{{#numbers}} {{.}} {{/numbers}} </p>
  <p>Doesn't work:</p>
  <table>
      <tr>
        {{#numbers}} <th> {{.}} </th> {{/numbers}}
      </tr>
  </table>
</div>
<div id="rendered"></div>
<script>
var json = {
  "numbers": [ 1, 2, 3 ]
  };
var compiledTemplate = Mustache.to_html($('#template').html(), json).replace(/^\s*/mg, '');
$('#rendered').html(compiledTemplate);
</script>
</body>
</html>

Выход:

Works but not what I need:
1 2 3
Doesn't work:
[object Object] 

Есть ли способ решить эту проблему или распечатать атрибуты объекта с помощью mustache.js?

Проблема уже задана в их системе задач, ответов пока нет: https://github.com/janl/mustache.js/issues/295

Спасибо, Мариано.


person marianocifre    schedule 16.02.2013    source источник


Ответы (3)


Наконец, это то, что я сделал.

Заменен шаблон элемента div на элемент сценария:

с <div id="template" style="display:none"> по <script id="template" type="text/x-mustache-template">

И работал как положено =)

person marianocifre    schedule 20.02.2013
comment
у вас также могли возникнуть проблемы с использованием усов против jquery 1.9.1, взгляните на: stackoverflow.com/questions/15650487/. У меня была такая же проблема с использованием icanhaz.js/mustache с jquery 1.9.1. После перехода на jquery 1.8.3 проблема исчезла. - person ducin; 28.03.2013

Хотели бы вы этого?

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://raw.github.com/janl/mustache.js/0.7.2/mustache.js"></script>
</head>
<body>
<div id="template" style="display:none">
  <p>Works but not what I need:</p>
  <p>{{#numbers}} {{.}} {{/numbers}} </p>
  <p>Doesn't work:</p>
  <table>
      <tr>
        {{#numbers}} {{{th}}} {{/numbers}}
      </tr>
  </table>
</div>
<div id="rendered"></div>
<script>
var json = {
  "numbers": [ 1, 2, 3 ],
  "th": function () {
    return "<th>" + this + "</th>"
  }
};
var compiledTemplate = Mustache.to_html($('#template').html(), json);
$('#rendered').html(compiledTemplate);
</script>
</body>
</html>
person Thomas Yang    schedule 19.02.2013

Я потратил много времени на отладку этого.

Проблема $('#template').html(). Он возвращает неработающий HTML, потому что разметка таблицы искажена (вещи за пределами <th> отображаются вне таблицы браузером)

Вот почему переход на <script> помогает

person Alex from Jitbit    schedule 15.11.2018