Backbone.js 木偶模板助手正在转义html字符
我有一个视图,它的模型包含一个小数组。我想输出包装在自己的数组项中的每个数组项,但是当在模板中使用模板帮助器时,我将得到转义的html字符,并将其输出为 有没有办法防止这种情况发生Backbone.js 木偶模板助手正在转义html字符,backbone.js,marionette,Backbone.js,Marionette,我有一个视图,它的模型包含一个小数组。我想输出包装在自己的数组项中的每个数组项,但是当在模板中使用模板帮助器时,我将得到转义的html字符,并将其输出为 有没有办法防止这种情况发生 templateHelpers: function () { return { tagsHelper: function(){ var t = ""; this.tags.forEach(function(tag) { t+=
templateHelpers: function () {
return {
tagsHelper: function(){
var t = "";
this.tags.forEach(function(tag)
{
t+="<span>"+tag+"</span>";
});
return t;
},
}
},
及
我能够使用一种不同的方法,使用一个模板内逻辑块,让它工作,但我仍然非常想知道如何修复最初的问题,以防我发现自己将来需要使用templateHelpers
<script type="text/template" id="font-list-item">
<td class="alias"><%- name %></td>
<td class="tags">
<% tags.forEach(function(tag){ %>
<span><%= tag %></span>
<% }); %>
</td>
</script>
木偶网使用幕后渲染其模板。此模板系统支持两种打印变量的方式:
将输出转义的变量
将输出变量unscaped
在第一个示例中,您使用的是转义字符,它将输出如下字符:
像
&as&;
等
为了能够在示例中使用templateHelper,您应该将标记Shelper呈现为,因为它包含不应转义的HTML
但是,在某些情况下,在呈现未被替换的变量时,应该注意可能的XSS攻击。因此,最好确保变量本身被转义。您的示例可以改写为:
templateHelpers: function () {
return {
tagsHelper: function(){
var t = "";
this.tags.forEach(function(tag) {
// note the _.escape(..) below
t += "<span>" + _.escape(tag) + "</span>";
});
return t;
}
}
}
但是,我建议您使用第二种解决方案,在模板中使用html标记,因为在模板中键入html更有意义:-注意标记本身应该转义,因此使用语法感谢您指出我模板中的一个明显漏洞!我以前注意到,有一些教程使用了其中一种,但对于一个无害的角色来说,这是一个非常显著的区别。我想是的。哎呀!
templateHelpers: function () {
return {
tagsHelper: function(){
var t = "";
this.tags.forEach(function(tag) {
// note the _.escape(..) below
t += "<span>" + _.escape(tag) + "</span>";
});
return t;
}
}
}