任何人都知道为什么这不起作用?我正试图让_.template使用大括号。
_.templateSettings = { //change delimiter to <$ $>
interpolate : /\<\$(.+?)\$\>/g
};
var list = "<$ _.each(people, function(name) { $> <li><$ name $> </li> <$ }); $>";
var html=_.template(list);
console.log(html({people : ['moe', 'curly', 'larry']}));
它在))产生以下语法错误错误:
((__ t =( .each(people,function(name){))== null?'': _t)+
以下是Underscore文档所说的内容:
如果ERB风格的分隔符不是你的一杯茶,你可以改变 下划线的模板设置使用不同的符号来设置 内插代码。定义插值正则表达式以匹配表达式 应该逐字插入,匹配的逃避正则表达式 在HTML转义后应该插入的表达式,以及 评估正则表达式以匹配应该在没有评估的表达式 插入到结果字符串中。您可以定义或省略任何 三者的结合。例如,执行Mustache.js样式 模板:
_.templateSettings = {interpolate:/ {{(。+?)}}}}}
var template = _.template(“Hello {{name}}!”);模板({name: “胡子”}); =&GT; “你好小胡子!”
答案 0 :(得分:9)
你的问题是内插的东西应该产生一个独立的JavaScript表达式,并且:
_.each(people, function(name) {
不是有效的表达式。您需要定义单独的评估和插入正则表达式,然后使用评估一个用于_.each
;像这样的东西:
_.templateSettings = {
interpolate: /\{\{=(.+?)\}\}/g,
evaluate: /\{\{(.+?)\}\}/g,
};
var list = "{{_.each(people, function(name) {}} <li>{{=name}}</li> {{ }); }}";
请注意,插值现在使用{{= ... }}
,而{{ ... }}
仅用于评估(或嵌入)小型JavaScript代码段。