Подтвердить что ты не робот

Использование циклов в шаблонах магистрали/подчёркивания

У меня есть шаблон backbone.js/underscore.js, который я загружаю в представлении позвоночника для рендеринга. В представлении передается модель, содержащая массив posts объектов (который я называю post в шаблоне).

Проблема. Когда я пытаюсь выполнить цикл всех элементов массива posts, я получаю сообщение об ошибке Uncaught SyntaxError: Unexpected token ) и ссылается на строку в базовой системе. Код вида template: _.template( $('#tpl_SetView').html() ).

Я неправильно делаю цикл, который вызывает эту ошибку?

Шаблонный код

<script type="text/template" id="tpl_SetView">
    <div class="row_4">
        <div class="photo_container">
            <div class="set_cover">
                <img src="/<%= posts[0].thumb_subpath %><%= posts[0].img_filename %>" width=240 />
            </div>
            <div class="set_thumbs">
                <%= _.each(posts, function(post) { %>
                    <img src="<%= post.thumb_subpath %><%= posts.img_filename %>" width=55 />
                <%= }); %>
            </div>
        </div>
    </div>
</script>
4b9b3361

Ответ 1

Чтобы эхо использовать переменную, используйте <%= %>, но для разбора кода javaScript просто используйте <% %>.

Например:

// In your Backbone View
var posts = {"posts": this.model.toJSON()};
var template = _.template($("#tpl_SetView").html(), posts);


// In your template
<div class="row_4">
    <div class="photo_container">
        <div class="set_cover">
            <img src="/<%= _.escape(posts[0].thumb_subpath) %><%= _.escape(posts[0].img_filename) %>" width=240 />
        </div>
    <div class="set_thumbs">
        <% _.each(posts, function(post){ %>
            <img src="<%= _.escape(post.thumb_subpath) %><%= _.escape(posts.img_filename) %>" width=55 />
        <% }); %>
        </div>
    </div>
</div>

Ответ 2

Я думаю, вы обнаружите, что проблема в этих строках:

<%= _.each(posts, function(post) { %>
    <img src="<%= post.thumb_subpath %><%= posts.img_filename %>" width=55 />
<%= }); %>

Из моего воспоминания о том, что подчеркивание делает для оценки шаблонов, эти строки не имеют большого смысла. Каждый элемент <% =..% > оценивается отдельно, то есть они должны быть полными оценочными выражениями, а не частичными функциональными блоками.

Править: На самом деле, Джеймс прав. <%..% > может быть определен отдельно (все сводится к большой строке javascript в конце). Он экранирован и интерполированные выражения, которые должны быть отдельными выражениями.

Edit II: Несмотря на это, в контексте оценки я думаю, что использование функционального блока все равно создало бы строку javascript для bizzare, которая может не оцениваться так, как предполагалось... Мне пришлось бы об этом подумать. Возможно, все будет хорошо.