可以't让underscore.js在没有语法错误的情况下使用大括号

Can't get underscore.js to use curly braces without syntax error

本文关键字:情况下 错误 语法 js underscore 可以      更新时间:2023-09-26

有人知道为什么这不起作用吗?我正试图让_模板使用大括号。

    _.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)+

以下是Undercore文档中的内容:

如果ERB风格的分隔符不是你喜欢的,你可以改变Undercore的模板设置使用不同的符号进行衬托插值代码。定义插值正则表达式以匹配表达式应该逐字插入,一个要匹配的转义正则表达式应在HTML转义后插入的表达式,以及计算regex以匹配应该在没有插入到生成的字符串中。您可以定义或省略三者的结合。例如,要执行Mustache.js样式模板:

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

var template=_.template("你好{{name}}!");模板({名称:"Mustache"});=>"你好,野马!"

您的问题是,插值的东西应该产生一个独立的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/

相关文章: