Я использую механизм шаблонов подчеркивания backbone с шаблонами форматирования усов.
Я уже успешно использовал его в другом месте проекта, но теперь впервые я использую шаблоны списка циклов из усов для заполнения шаблона, который выдает ошибку, которая меня немного сбивает с толку. Ошибка в хроме:
"Uncaught SyntaxError: Unexpected token ILLEGAL"
и указывает на функцию шаблона подчеркивания в обратной трассировке, что довольно бесполезно, но в firebug я получаю более полезную ошибку, подобную этой:
Предполагая, что проблема заключается в символе решетки «#», что имеет смысл, поскольку я знаю, что усы работают нормально, так как многие другие части проекта используют их хорошо, также это первый раз, когда я использую символ решетки. в моих шаблонах. Это похоже на проблему либо с функцией зацикливания, либо с настройками интерполяции/шаблона для подчеркивания.
Вот соответствующий фрагмент моего шаблона:
<div class="thumblist thumblistleft" id="currentprojectslist">
<div class="thumb-list-header">
<h2>current projects</h2>
</div>
<div class="thumb-list-area">
<ol>
{{#worklist}} <!----- LOOK HERE --->
{{#current}}
<li><a>{{title}}</a></li>
{{/current}}
{{/worklist}}
</ol>
</div>
</div>
и вот образец JSON (который все проверяет нормально)
{blah blah blah lot in here before,"worklist":[{"thumb":"img/project-s.jpg","id":"340","title":"Test Project One","desc":"big load of content here","current":true}], and so on....}
Сначала я использовал этот пример для справки: http://mustache.github.com/#demo
Я ДУМАЮ, В ЧЕМ МОЖЕТ БЫТЬ ПРОБЛЕМА:
underscore.js предлагает использовать это перед рендерингом шаблона усов:
_.templateSettings = {
evaluate : /\{\[([\s\S]+?)\]\}/g,
interpolate : /\{\{([\s\S]+?)\}\}/g
};
также:
interpolate : /\{\{(.+?)\}\}/g
Также только оператор интерполяции, я пробовал оба. Однако мое знание регулярных выражений действительно плохое, и у меня есть ощущение, что оно может не вместить хэш? Во всяком случае... Я совершенно запутался. Может ли кто-нибудь помочь мне здесь?
возможно ли вообще так зацикливаться? Глядя на источник подчеркивания, я не уверен: http://documentcloud.github.com/underscore/docs/underscore.html#section-120
Большое спасибо
/\{\{([\s\S]+?)\}\}/g
будет соответствовать{{#foo}}
и захватить#foo
. Вы можете избежать захвата хэша, используя/\{\{#?([\s\S]+?)\}\}/g
, хотя я думаю, что это вызовет другие проблемы. - person Qtax   schedule 25.01.2012