1

我不确定这是否可以做到,但我有这个 JSON 结构:

var data = {"obj": [
              {"user": "Fred", "age": "23", "type": "personal"},
              {"user": "Ralph", "age": "32", "type": "business"},
              {"user": "John", "age": "44", "type": "other"}
             ]
           };

我的 HTML 页面中有 3 个目标区域,我想在其中显示用户,以及基于“类型”的年龄。我正在使用车把来渲染这些并在我的 ajax 中有这个:

var source, 
template = Handlebars.compile(source), 
data;

$.each(data['obj'], function (i, o) {
    if (o['type'] === "personal") {
        source = $("#personal").html();
        $("#place1").html(template(data));
    } else if (o['type'] === "business") {
        source = $("#business").html();
        $("#place2").html(template(data));
    } else if (o['type'] === "casual") {
        source = $("#other").html();
        $("#place3").html(template(data));
    }
});

我希望拥有它,以便 $.each 函数将每个对象数组发送到指定区域,但他们最终只是将一批发送到一个部分,然后是下一个,依此类推。请帮忙!

4

1 回答 1

1

您快到了。在您的情况下,已编译的模板函数template将对象作为其参数,因此您可以说:

$('#place1').html(template(o));

然后模板将使用{{user}}{{age}}访问数据;例如:

{{user}}'s age is {{age}}

如果您想更改每种类型的实际模板,则只需Handlebars.compile再次调用:

if(o.type === 'personal') {
    template = Handlebars.compile($('#personal').html());
    $('#place1').html(template(o));
}

如果需要,您可以将编译后的模板缓存在一个对象中。

于 2012-09-24T01:50:24.397 回答