2013-07-18 2 views
0

В обычном случае вы получаете значение через ключ, то есть для получения значения имени с <% = name%>, вам нужно знать, что ключ является «именем», , Мой вопрос в том, что вы не знаете ключ json-поля, в первую очередь, как вы можете его перебирать, например, сбросить все пары ключ-значение в таблице?Итерация через произвольный json в шаблоне основы/подчёркивания

+0

с помощью [ '_.forEach()' ] (http://underscorejs.org/#each). – gustavohenke

ответ

5

Вы можете преобразовать свой объект в массив объектов с ключами и значениями в качестве атрибутов. Например,

var obj = {one: 1, two: 2, three: 3}; 

var fields = _.map(
    _.pairs(obj), 
    function(pair) { 
     return { 
      key: pair[0], 
      value: pair[1] 
     }; 
    } 
); 

даст [{key: "one", value: 1}, {key: "two", value: 2}, {key: "three", value: 3}]

Вы можете кормить этот массив в шаблон, что-то вроде

var template = _.template(
    '<% _(list).each(function(field) { %>'+ 
     '<%= field.key %> : <%= field.value %><br>'+ 
    '<% }); %>' 
); 
$('body').append(template({ 
    list: fields 
})); 

И скрипку играть с http://jsfiddle.net/nikoshr/kvxuN/

+0

Большое спасибо! Обычно я жду некоторое время, прежде чем принимать ответ, но на этот раз не нужно! – spacemilkman

3

Вы надеваете» t нужно перестроить структуру JSON.

просто попробовать

_.each(list,function(key,value,field){ 
key + ':' + value 

}) 
+1

Спасибо, это было полезно. Однако [у вас есть аргументы ключа и значения в обратном порядке] (http://underscorejs.org/#each). – Sara

0

Учитывая JSON, где вы не знаете Key или Value, такие как {Bob : "01/01/2000", Jane : "10/10/2001"} и вы хотите использовать шаблон Underscore:

options = {Bob : "01/01/2000", Jane : "10/10/2001"} 


$.each(options, function (name, age) { 
    $("#target-div").append(_.template($("#template-name-age").html(), { Name : name, Age : age })) 
}) 


<script type="text/template" id="template-name-age"> 
    <div data-name="<%= Name %>" class="some-css-class"><%= Age %></div> 
</script> 
Смежные вопросы