Dee*_*ons 2 javascript templates boolean-logic underscore.js underscore.js-templating
我不得不替换默认的下划线teplating delimiters/Interpolate正则表达式以兼容asp.net webforms.从网站我选择了胡须,如语法
_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};
Run Code Online (Sandbox Code Playgroud)
试过这个
_.template("{{if(loggedIn)Welcome {{name}}}}",{name:"James",completed:true});
但似乎这不是使用模板系统检查布尔表达式的方式(因为发生错误).但是从文档来看似乎是可能的
以及使用<%...%>执行任意JavaScript代码
mu *_*ort 15
您的问题是您正在定义一个Mustache风格的替代品,<%= ... %>但尝试在您通常使用的地方使用它<% ... %>.从精细手册:
定义一个插值正则表达式以匹配应该逐字插入的表达式,一个转义正则表达式匹配应该在HTML转义后插入的表达式,以及一个评估正则表达式来匹配应该在不插入结果字符串的情况下进行评估的表达式.
所以有三个正则表达式:
<%= ... %>.<%- ... %>.<% ... %>.您告诉Underscore {{ ... }}代替使用,<%= ... %>然后您收到错误,因为if(loggedIn)无法插值.您只需要修复您的内容_.templateSettings以反映您要执行的操作:
_.templateSettings = {
evaluate: /\{\{(.+?)\}\}/g,
interpolate: /\{\{=(.+?)\}\}/g
};
Run Code Online (Sandbox Code Playgroud)
然后你的模板看起来像这样:
{{ if(loggedIn) { }}Welcome {{= name }} {{ } }}
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/RwgVg/8/
您需要在模板中包含{和},因为_.template在编译模板时添加分号,这会导致以下内容:
if(loggedIn) {; ...
Run Code Online (Sandbox Code Playgroud)
(感谢JaredMcAteer指出这一点).
您可能还想添加一个转义正则表达式,这可能是/\{\{-(.+?)\}\}/g.