Preserve backslashes in _.template()

For example, templates containing things like the literal string
`\ribbit` weren't being escaped properly when being compiled. The `\r`
was being interpreted as a carriage return character.

I've added a test for this too, and all the existing tests pass.
This commit is contained in:
Jason Davies
2010-11-09 22:59:03 +00:00
parent 44d09ae1c6
commit 47eb154ccf
2 changed files with 5 additions and 1 deletions

View File

@@ -55,6 +55,9 @@ $(document).ready(function() {
var result = basicTemplate({thing : 'This'});
equals(result, "This is gettin' on my noives!", 'can do basic attribute interpolation');
var backslashTemplate = _.template("<%= thing %> is \\ridanculous");
equals(backslashTemplate({thing: 'This'}), "This is \\ridanculous");
var fancyTemplate = _.template("<ul><% \
for (key in people) { \
%><li><%= people[key] %></li><% } %></ul>");

View File

@@ -646,7 +646,8 @@
var c = _.templateSettings;
var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
'with(obj||{}){__p.push(\'' +
str.replace(/'/g, "\\'")
str.replace(/\\/g, '\\\\')
.replace(/'/g, "\\'")
.replace(c.interpolate, function(match, code) {
return "'," + code.replace(/\\'/g, "'") + ",'";
})