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

met*_*ate 2 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']}));
Run Code Online (Sandbox Code Playgroud)

它在))产生以下语法错误错误:

((__t =(. each(people,function(name){))== null?'':_ t)+

以下是Underscore文档所说的内容:

如果ERB样式的分隔符不是您的茶,您可以更改Underscore的模板设置以使用不同的符号来设置插值代码.定义一个插值正则表达式以匹配应该逐字插入的表达式,一个转义正则表达式匹配应该在HTML转义后插入的表达式,以及一个评估正则表达式来匹配应该在不插入结果字符串的情况下进行评估的表达式.您可以定义或省略三者的任意组合.例如,要执行Mustache.js样式模板:

_.templateSettings = {interpolate:/ {({.+?)}}}}}};

var template = _.template("Hello {{name}}!"); 模板({name:"Mustache"}); >"Hello Moustache!"

mu *_*ort 9

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

_.each(people, function(name) {
Run Code Online (Sandbox Code Playgroud)

不是一个有效的表达.您需要定义单独的评估插值正则表达式,然后使用评估一个_.each; 这样的事情:

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

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

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