Ошибка «Uncaught SyntaxError: Unexpected token‹ в underscore.js »

Вот мой код,

HTML:

<script type="text/html" id="test_temp">
    <div class="row" id="opportunityList">
        <% _.each(ops, function(option){
            <div class="span12">
                <div class="well basicInformation">
                    <div class="row">
                        <div class="span4 opportunityName" >
                            <h4><%= option.company_name %></h4>
                        </div>
                        <div class="span4 pull-right">
                            <ul class="inline">
                                <li class="dealGrade">
                                    <span><%= option.dealGrade %></span>
                                    <span class="subheader">Deal Grade</span>
                                </li>
                                <li class="estimateddevices">
                                    <span><%= option.devices %></span>
                                    <span class="subheader">Devices</span>
                                </li>
                                <li class="accountValue">
                                    <span><%= option.accountValue %></span>
                                    <span class="subheader">Account value</span>
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        });
        %>
    </div>
</script>

СЦЕНАРИЙ:

testView = Backbone.View.extend({
    initialize: function(){
        this.render();
    },

    render: function(){
        var ops = [
            {dealGrade: '50%', devices: 123, accountValue: '20%', company_name: 'Kyocera', rep_name: 'James Kogg', rep_designation: 'Sales Rep', proposalCount: 2},
            {dealGrade: '75%', devices: 215, accountValue: '41%', company_name: 'Flipkart', rep_name: 'Christina Kogg', rep_designation: 'MD', proposalCount: 0}
        ]

        var template = _.template($("#test_temp").html(), ops);

        this.$el.append(template);
    }
});

var test_view = new testView({ el: $("#viewport .container") });

Я получаю это сообщение об ошибке:

Uncaught SyntaxError: неожиданный токен ‹в underscore.js

Что я делаю неправильно?


person painotpi    schedule 16.01.2013    source источник


Ответы (2)


Вы не закрываете <% вокруг _.each или открываете тег шаблона для закрывающего _.each });:

<script type="text/html" id="test_temp">
   <div class="row" id="opportunityList">
     <% _.each(ops, function(option){ %>
       ...
     <% }); %>
   </div>
</script>

Механизм шаблонов Underscore довольно прост, он просто выполняет небольшую обработку текста, чтобы превратить ваш шаблон наизнанку в код JavaScript.

Кроме того, функция шаблона хочет, чтобы ее данные представляли собой пары ключ / значение (т. Е. Объект JavaScript), поэтому вам нужно дать своему ops имя:

var template = _.template($("#test_temp").html(), { ops: ops });
person mu is too short    schedule 16.01.2013
comment
Ого, хорошо, этот странный синтаксис разрешился, но теперь он говорит, что ops не определен - person painotpi; 16.01.2013
comment
Все еще не работает, возникает та же ошибка, мои файлы сценариев загружаются после #test_temp, это правильно или мне нужно это изменить? - person painotpi; 16.01.2013
comment
Разве это не должно быть { ops: ops }, а не { opts: ops }? - person Lukas; 16.01.2013
comment
@Lukas: Хорошо, спасибо, мои пальцы не всегда печатают то, что думает мой мозг :) - person mu is too short; 16.01.2013

У меня похожая ошибка

Uncaught SyntaxError: неожиданный токен var в новой функции () в шаблоне функции ._.

это потому, что в моем шаблоне я написал оператор js внутри <%= вместо <%

поэтому убедитесь, что синтаксис вашего шаблона правильный

person Basheer AL-MOMANI    schedule 24.06.2018