如果JSON对象在嵌套数组中,如何使用Mustache.js?

时间:2011-04-01 17:37:24

标签: javascript jquery templates mustache

我听过很多关于胡子的事情,并决定尝试一下。

我试图找出如何使用jQuery的Mustache模板。我一直在寻找几天。

可以在这里找到胡子: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 个答案:

答案 0 :(得分:8)

乍一看,您的JSON对象似乎嵌套在一个数组中。删除它周围的[]然后查看它是否有效。您可以在服务器级别(我推荐)或在javascript中通过调用:

执行此操作
strHTML = Mustache.to_html(template, data[0]);

而不是:

strHTML = Mustache.to_html(template, data);

答案 1 :(得分:3)

作为一种好的做法,如果您不打印数组,服务器不应该从您的请求中返回该数组。

即使它被序列化为JSON,要获得此结果,源结构必须类似于对象的数组,或者(如在PHP中)一个关联数组的数组。

如果您真正想要的是打印名称列表,则应该迭代“。”就像在这个小提琴:http://jsfiddle.net/viniciuspires/3e5cs/

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

只为一个名称产生相同的结果,但扩展名单时会获得更多名称。