Your problem is that you're defining a Mustache-style replacement for <%= ... %>
but trying to use it where you'd normally use <% ... %>
. From the 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.
So there are three regexes in play:
- interpolate is for
<%= ... %>
.
- escape is for
<%- ... %>
.
- evaluate is for
<% ... %>
.
You're telling Underscore to use {{ ... }}
in place of <%= ... %>
and then you're getting an error because if(loggedIn)
can't be interpolated. You just need to fix your _.templateSettings
to reflect what you're trying to do:
_.templateSettings = {
evaluate: /{{(.+?)}}/g,
interpolate: /{{=(.+?)}}/g
};
and then your template would look like this:
{{ if(loggedIn) { }}Welcome {{= name }} {{ } }}
Demo: http://jsfiddle.net/ambiguous/RwgVg/8/
You'll need to include the {
and }
in the template because _.template
adds semicolons when compiling the template, that results in things like:
if(loggedIn) {; ...
(Thanks to JaredMcAteer for pointing this out).
You might want to add an escape regex as well, that would probably be /{{-(.+?)}}/g
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…