Потому что вам дужно выводить данные в определенном формате (шаблоне)
Например шаблон модального окна с использованием шаблонизатора underscore может выглядеть так:
<div>
<div class="title"><%= title %></div>
<div class="content"><%= content %></div>
<div class="buttns">
<% for (var i = 0; i < buttons.length; i++) { %>
<button><%= button[i].text %></button>
<% } %>
</div>
</div>
Хочу получить верстку модального окна с 2 кнопками, заголовком и контентом:
_.template(modalTpl)({
title: "Заголовок",
content: "Контент",
buttons: [{text: "Да"}, {text: "Нет"}]
});
Таким образом мы уменьшаем в коде прямую работу с домом. Это удобно, особенно когда есть много похожих операций.