каждый цикл в шаблоне underscore.js - PullRequest
26 голосов
/ 09 сентября 2011

Я тут что-то не так делаю, но не вижу!Я пытаюсь зациклить массив в шаблоне подчеркивания.Это не работает, поэтому я что-то упускаю, вот мой код, мои шаблоны работают нормально, иначе, это просто _.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
};

1 Ответ

65 голосов
/ 15 сентября 2011

Поскольку вы только определили регулярное выражение интерполяции в своих пользовательских настройках шаблона, подчеркивание не знает, когда оценивать выражения.Когда вы определяете пользовательские настройки шаблона, вы должны определить и провести различие между интерполяцией и оценкой.Из документации 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

...