каждый цикл в шаблоне underscore.js

Я делаю что-то не так здесь, но я не вижу этого! Я пытаюсь зациклить массив в шаблоне подчеркивания. Это не работает, поэтому я что-то упускаю. Вот мой код, в противном случае мои шаблоны работают нормально, это просто _.each материал, который выдает ошибку:

<script type="text/template" id="PageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@ i @></p> <@ }); @>
    </div>    
</script>

Я также сделал некоторые настройки шаблона следующим образом:

_.templateSettings = {
    interpolate: /\<\@(.+?)\@\>/gim
};

person Joel    schedule 09.09.2011    source источник
comment
Является ли изображение с заглавной буквы классом или массивом?   -  person sunkencity    schedule 09.09.2011
comment
Странно, что только у меня такая проблема....   -  person Joel    schedule 14.09.2011


Ответы (1)


Поскольку вы определили только регулярное выражение интерполяции в настройках пользовательского шаблона, подчеркивание не знает, когда оценивать выражения. Когда вы определяете пользовательские настройки шаблона, вам необходимо определить и провести различие между интерполяцией и оценкой. Из документации подчеркивания template():

Определите регулярное выражение с интерполяцией и (необязательно) регулярное выражение с оценкой, чтобы соответствовать выражениям, которые должны быть вставлены и оценены соответственно. Если регулярное выражение для оценки не указано, ваши шаблоны будут способны только интерполировать значения.

В стандартном (без пользовательских настроек) шаблоне разница заключается в оценке: <% %> и интерполяции значений: <%= %>.

Так, например, ваш шаблон выше должен быть (со стандартными настройками шаблона):

<% _.each([0,1,2,3,4], function(i) { %>  <p><%= i %></p> <% }); %>

Если вы хотите продолжать использовать пользовательские настройки, вам также необходимо определить регулярное выражение оценки в _.templateSettings. Основываясь на ваших вопросах и комментариях, что-то вроде:

   _.templateSettings = {
      interpolate: /\<\@\=(.+?)\@\>/gim,
      evaluate: /\<\@(.+?)\@\>/gim
  };

Затем обновите свой шаблон, чтобы использовать форму оценки вокруг блоков кода и форму интерполяции вокруг значений, например:

<script type="text/template" id="pageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@= i @></p> <@ }); @>
    </div>    
</script>

источник: http://documentcloud.github.com/underscore/#template

person mjtognetti    schedule 15.09.2011
comment
Привет! Спасибо за отличный ответ. Теперь я обновился до: _.templateSettings = { интерполировать: /\‹\@\=(.+?)\@\›/gim, оценить: /\‹\@(.+?)\@\›/ гим, }; Но боюсь, это ничего не меняет, я получаю те же ошибки.. - person Joel; 16.09.2011
comment
хм, вы можете опубликовать обновленный код шаблона, а также ошибки, которые вы получаете? - person mjtognetti; 16.09.2011
comment
обновил ответ вместо публикации шаблона и настроек в этих комментариях - person mjtognetti; 16.09.2011
comment
Я понимаю, что это старый поток, но я заработал, изменив регулярное выражение на использование /g вместо /gim в конце каждого выражения. подумал, что это может помочь тому, кто наткнулся на эту тему! все регулярное выражение: _.templateSettings = { интерполировать: /\‹\@\=(.+?)\@\›/g, оценить: /\‹\@(.+?)\@\›/g }; - person royse41; 12.10.2012
comment
определение регулярного выражения как для интерполяции, так и для оценки решило мою проблему. - person Anand; 07.07.2014