iCanHaz.js + Mustache не отображает первую строку в объекте данных - PullRequest
1 голос
/ 06 марта 2012

У меня есть объект данных JSON и шаблон javascript text / html, написанный с использованием синтаксиса усов.Я использую iCanHaz.js в качестве анализатора шаблонов.

Моя проблема в том, что первая строка в объекте данных не отображается.

Вот мой код JS:

 var data = jQuery.parseJSON('{"data":[{"title":"Title One"}, {"title":"Title Two"}]}');
 var html = ich.data_template(data);

И мой шаблон усов:

<script type="text/html" id="data_template">
    {{#data}}
       {{title}}<br />
    {{/data}}   
</script>

Приведенный выше код выводит это в виде моего визуализированного HTML:

<br />
Title Two<br />

Как вы можете видеть "Заголовок один" из JSONобъект не отображается.

Кто-нибудь знает почему?Я предполагаю, что это как-то связано с тем, что мой объект JSON неправильно структурирован (массивы / объекты).

Большое спасибо.

1 Ответ

3 голосов
/ 06 марта 2012

Попробуйте установить для необработанного флага (2-й аргумент) значение true.

var data = jQuery.parseJSON('{"data":[{"title":"Title One"}, {"title":"Title Two"}]}');
var html = ich.data_template(data, true); #Note the true.

Кроме того, почему вы пишете свой JSON в виде строки и анализируете его? Вы можете сделать:

var data = {"data": [{"title": "Title One"}, {"title": "Title Two"}]};
var html = ich.data_template(data, true);

Без необработанного флага он возвращает массив элементов узла, и вам потребуется установить элемент корневого уровня для его работы.

<script type="text/html" id="data_template">
    <div>
    {{#data}}
       {{title}}<br />
    {{/data}}   
    </div>
</script>

Вы можете проверить это, запустив в консоли следующий JavaScript.

ich.addTemplate('data_template', '{{#data}}{{title}}<br />{{/data}}');
var data = {"data": [{"title": "Title One"}, {"title": "Title Two"}]};
var html = ich.data_template(data, true);
console.log(html);

html = ich.data_template(data);

console.log(html);

ich.addTemplate('data_template_root', '<div>{{#data}}{{title}}<br />{{/data}}</div>');

html = ich.data_template_root(data, true);
console.log(html);

html = ich.data_template_root(data);

console.log(html);
...