2012-09-24 27 views
1

我不知道是否可以这样做,但我有这个JSON结构:发送JSON数据基于数据对象数组不同的车把模板

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

我有我的HTML页面,3个目标区域我想根据“类型”显示用户和年龄。我使用的把手使这些在我的阿贾克斯这样的:

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)); 
    } 
}); 

我希望把它使得$。每个函数将每个对象数组发送到指定的地方,但他们最终只是将批次发送到一个部分,然后发送下一个部分等等。请帮忙!

回答

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)); 
} 

您可以缓存编译模板中的对象,如果你想要的。

+0

源代码更改后不应该重新编译模板吗? – balafi

+0

@Elias:你的意思就像我更新的答案? –

+0

是的。谢谢。 – balafi