javascript - 下划线模板中的 bool 检查

标签 javascript templates underscore.js boolean-logic underscore.js-templating

为了与 asp.net webforms 兼容,我必须替换默认的下划线 teplating 分隔符/Interpolate 正则表达式。从网站上我选择了类似 mustache 的语法

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

试过了

_.template("{{if(loggedIn)欢迎{{name}}}}",{name:"James",completed:true});

但似乎这不是使用模板系统检查 bool 表达式的方法(因为发生错误)。但是从文档看来这是可能的

as well as execute arbitrary JavaScript code, with <% … %>

  • 那么我如何使用上述插值执行任意js代码

最佳答案

您的问题是您正在为 <%= ... %> 定义 Mustache 样式的替换项 |但尝试在您通常使用的地方使用它 <% ... %> .来自fine manual :

Define an interpolate regex to match expressions that should be interpolated verbatim, an escape regex to match expressions that should be inserted after being HTML escaped, and an evaluate regex to match expressions that should be evaluated without insertion into the resulting string.

所以有三个正则表达式在起作用:

  1. interpolate 用于 <%= ... %> .
  2. escape 用于 <%- ... %> .
  3. evaluate 用于 <% ... %> .

你告诉 Underscore 使用 {{ ... }}代替 <%= ... %>然后你得到一个错误,因为 if(loggedIn)不能插值。您只需要修复您的 _.templateSettings反射(reflect)您正在尝试做的事情:

_.templateSettings = {
    evaluate:    /\{\{(.+?)\}\}/g,
    interpolate: /\{\{=(.+?)\}\}/g
};

然后您的模板将如下所示:

{{ if(loggedIn) { }}Welcome {{= name }} {{ } }}

演示:http://jsfiddle.net/ambiguous/RwgVg/8/

您需要包含 {}在模板中因为 _.template在编译模板时添加分号,结果如下:

if(loggedIn) {; ...

(感谢 JaredMcAteer 指出这一点)。

您可能还想添加一个 escape 正则表达式,它可能是 /\{\{-(.+?)\}\}/g .

关于javascript - 下划线模板中的 bool 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597480/

相关文章:

javascript - Underscore.js findLast() 方法

javascript - 如何将 HTMLCollection 转换为数组而不清空它?

javascript - 串联代码运行得非常慢谷歌脚本

java - 如何制作创建多个文件的 Netbeans 模板?

c++ - Boost/C++ eval_if 失败

javascript - 使用下划线链将 2 个对象的属性值合并到一个数组中

javascript - jQuery 类选择器 - 我可以定位两个项目吗?

javascript - 隐藏和替换 html 内容和数据属性值

c++ - 如何让内部模板类成为外部模板类的类型?

javascript - _.defer 簇参数数组