不能让underscore.js使用花括号而不会出现语法错误

时间:2013-07-04 04:49:31

标签: javascript templates underscore.js underscore.js-templating

任何人都知道为什么这不起作用?我正试图让_.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; “你好小胡子!”

1 个答案:

答案 0 :(得分:9)

你的问题是内插的东西应该产生一个独立的JavaScript表达式,并且:

_.each(people, function(name) {

不是有效的表达式。您需要定义单独的评估插入正则表达式,然后使用评估一个用于_.each;像这样的东西:

_.templateSettings = {
    interpolate: /\{\{=(.+?)\}\}/g,
    evaluate: /\{\{(.+?)\}\}/g,
};
var list = "{{_.each(people, function(name) {}} <li>{{=name}}</li> {{ }); }}";

请注意,插值现在使用{{= ... }},而{{ ... }}仅用于评估(或嵌入)小型JavaScript代码段。

演示:http://jsfiddle.net/ambiguous/SDmLz/