【问题标题】:Jquery template each tag: Rendering multiple select boxes usingJquery模板每个标签:使用渲染多个选择框
【发布时间】:2011-12-10 02:08:43
【问题描述】:

我正在使用 jquery 每个标签将来自服务器的 json 数据呈现为选择框。例如:

$('#dogsBox').append(  $.toxmpl("{{each dogs}}<option value='${$value.id}'>${$value.name}</option>{{/each}}",data) 

$('#catsBox').append(  $.tmpl("{{each cats}}<option value='${$value.id}'>${$value.name}</option>{{/each}}",data)

$('wolvesBox').append(  $.tmpl("{{each wolves}}<option value='${$value.id}'>${$value.name}</option>{{/each}}",data)

假设狗、猫和狼是另一个对象动物的属性,我怎样才能使这个通用?我应该用什么代替“??????”在下面的脚本中。

动物:[狗:...,猫:....,狼:...]

    for(var animalName in animals){
    $("#"+animalName).append(  $.tmpl("{{each ????? }}<option value='${$value.id}'>${$value.name}</option>{{/each}}", animals );

}

将参数留给每个空白并将动物[动物名称]作为数据传递也不起作用。

谢谢, 克里斯。 P.S:我使用 each 是因为它也适用于对象,而不仅仅是列表。

【问题讨论】:

  • 关于如何在每个标签中使用 $item 的任何提示也会有所帮助吗?

标签: jquery-plugins jquery-templates jquery


【解决方案1】:
for(var animalName in animals){
    $.each(animals[animalName], function(key, val){
            $("#"+animalName ).append(  $.tmpl("<option value='${id}'>${name}</option>", val)  );
        }
    );

【讨论】:

  • 正如我在 P.S 中提到的,我使用每个标签,因为它迭代对象和数组。不考虑它对我来说不是一个选项,因为输入的 JSON 数据可以是数组、对象或地图,并且脚本必须能够遍历其中的任何一个。
  • 但是你在'for'中循环并且你在'each'中循环。你不能这样做,因为'for'的每个元素中都没有数组
  • 动物是一个集合/数组,其中包含猫、狗等,它们又是集合/数组/对象。
  • 请原谅我的无知,我正在试一试你的答案。
  • Sedat,您之前的评论是正确答案。我不能使用最近的答案,因为它不是通用的,如果明天有鱼,我将不得不编辑脚本。基本思想是使用 jquery each 而不是 {{each}}。这是对我有用的脚本: for(var animalName in animal){ $("#"+animalName ).html(''); $.each(animals[animalName], function(key, val){ $("#"+animalName ).append( $.tmpl("", val) ); } ); value='${$value.id}'>${$value.name}{{/each}}") ); }