Underscore templates /Nesting/.

by InviS

HTML

<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
<script src="https://raw.github.com/documentcloud/underscore/master/underscore-min.js"></script>
<table id='cmp' border='1'>
    <tr><th>User</th><th>Languages</th></tr>
</table>

<script id='langTmpl' type='x-jquery-tmpl'>
    <tr>
        <td>{{= firstname}} ${lastname}</td>
        <td>
          {{if languages}}
            {{each(i, value) languages}}
                ${i + 1}. ${value}<br />
            {{/each}}
          {{else}}
            Native only
          {{/if}}
        </td>
    </tr>
</script>

CSS

th{font-weight: bold; padding: 4px 10px; text-align: center;}
td{padding: 3px; font-style: italic;}

JavaScript

Users = [
    {
    firstname: 'Valeriy',
    lastname: 'Vasin',
    languages: ['Russian', 'Ukrainian', 'English']},
{
    firstname: 'Nastya',
    lastname: 'Guseva',
    languages: ['Russian', 'Ukrainian', 'English', 'German']},
{
    firstname: 'Alex',
    lastname: 'Levzhinsky'}
];

var tmpl = "<% for (var i=0; i<users.length; i++){ %>\
                <tr>\
                    <% var user = users[i]; %>\
                    <td><%= user.firstname %> <%= user.lastname %></td>\
                    <td>\
                        <% if (user.languages){ %>\
                            <% for (var j=0; j<user.languages.length; j++){ %>\
                                <%= j+1 %>.<%= user.languages[j] %><br />\
                            <% } %>\
                        <% } else { %>\
                            Native only\
                        <% } %>\
                    </td>\
                </tr>\
            <% } %>";

var html = _.template(tmpl, {
    users: Users
});
$('#cmp').append(html);