Как использовать Mustache.js, если объект JSON находится во вложенном массиве? - PullRequest
7 голосов
/ 01 апреля 2011

Я слышал замечательные вещи об Усиках и решил попробовать.

Я пытаюсь понять, как использовать шаблон Mustache с jQuery.Я искал несколько дней.

Усы можно найти здесь: https://github.com/janl/mustache.js/

Вот моя попытка:

$.getJSON('get_fullname.asp', {name: 'johnny'}, function(data, status, xhr) {

    var template = '<h1>{{NAME}}</h1><p>test</p>';
    strHTML = Mustache.to_html(template, data);
    $('#container').html( strHTML );

});

Мои данные JSON возвращаются [{"NAME":"John","MIDDLE":"A","LAST":"Smith"}]

Все, что я получаю, это <p>test</p>.

Я также пытался использовать этот шаблон, но все равно получаю <p>test</p>.

var template = '{{#NAME}}<h1>.</h1>{{/NAME}}<p>test</p>';

Чего мне не хватает

Ответы [ 2 ]

8 голосов
/ 01 апреля 2011

На первый взгляд ваш JSON-объект кажется вложенным в массив. Удалите [] вокруг него и посмотрите, работает ли он тогда. Вы можете сделать это на уровне сервера (который я рекомендую) или в javascript, вызвав:

strHTML = Mustache.to_html(template, data[0]);

вместо:

strHTML = Mustache.to_html(template, data);
3 голосов
/ 11 июня 2013

В качестве хорошей практики, если вы не печатаете массив, сервер не должен возвращать это из вашего запроса.

Даже если он сериализован в JSON, для получения этого результата исходная структура должна быть чем-то вроде массива объекта или (как в PHP) массива ассоциативного массива.

Если вы действительно хотели напечатать список имен, вам следует повторить "." как в этой скрипке: http://jsfiddle.net/viniciuspires/3e5cs/

{{#.}}
<li>{{last}}, {{name}}.</li>
{{/.}}

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

...