Ответ 1
Когда я это сделаю:
_.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
var t = _.template($('#t').html());
с вашим шаблоном в #t
, я получаю сообщение об ошибке:
СинтаксисError: Неожиданный токен '='
Это хорошо подтвердило мое подозрение, что это оценивает регулярное выражение:
/<%([\s\S]+?)%>/g
соответствовал вашему шаблону <%= ... %>
в шаблоне. Знак равенства соответствует \S
, поэтому, конечно, выражение regex найдет <%= ... %>
, отмените <%
и %>
и оставит вас с синтаксической ошибкой в JavaScript, который _.template
будет пытаться построить.
Если вы заглянете внутрь источника _.template
, вы увидите, что регулярные выражения проверяются в определенном порядке:
-
escape
-
interpolate
-
evaluate
Итак, просто замена interpolate
приведет к тому, что объекты <%= ... %>
попадут в ловушку (и неверно истолкованы), но evaluate
.
Все, что вам нужно сделать, это заменить регулярное выражение evaluate
. Я бы рекомендовал заменить все три регулярных выражения, чтобы избежать проблем:
_.templateSettings = {
evaluate: /\{\{(.+?)\}\}/g,
interpolate: /\{\{=(.+?)\}\}/g,
escape: /\{\{-(.+?)\}\}/g
};