【发布时间】:2013-02-08 14:01:20
【问题描述】:
我正在使用带有小胡子格式模式的骨干网的下划线模板引擎。
我已经在项目的其他地方成功地使用了它,但现在我第一次使用来自 mustache 的循环列表模式来填充模板,该模板引发了我有点困惑的错误。 chrome中的错误是:
"Uncaught SyntaxError: Unexpected token ILLEGAL"
并在回溯中指向下划线的模板函数,这非常无用,但在萤火虫中我得到了一个更有用的错误,如下所示:
建议井号“#”是问题所在,这是有道理的,因为我知道 mustache 工作正常,因为项目的许多其他部分都在使用它,这也是我第一次使用我的模板中的哈希符号。它看起来像是循环功能或下划线的插值/模板设置的问题。
这是我模板的相关部分:
<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
也只是 interpolate 语句,我都试过了。但是我的正则表达式知识真的很差,我觉得它可能无法容纳散列?无论如何....我完全被难住了。 有人可以帮我吗?
甚至可以像这样循环吗?查看下划线来源我不确定: http://documentcloud.github.com/underscore/docs/underscore.html#section-120
非常感谢
【问题讨论】:
-
模式
/\{\{([\s\S]+?)\}\}/g将匹配{{#foo}}并捕获#foo。您可以使用/\{\{#?([\s\S]+?)\}\}/g避免捕获哈希,但我认为它会导致其他问题。 -
你有没有设法像这样循环?我真的很想,用下划线写出一个简单的 if 跨多个评估行来检查我的 JSON 中是否存在标志是非常烦人的。
-
嘿,很遗憾,下划线本身不会这样做,你必须包含 mustache.js 并执行 mustache.render,如下所示。我同意这真的很烦人
标签: javascript regex backbone.js underscore.js mustache