5

在我项目的 JQuery 模板中,我试图写出一个变量,它是一个 HTML 字符串,而不对 HTML 进行编码。当我像这样输出变量时:

 ${description}

它会导致原始 HTML 字符串与标签一起输出,就像这样:

<p>text <b>bold</b>  <i>italic</i></p>

但是当我尝试将标记转换为代码中相同位置的真实标签时:

   {{html $description}}

不输出任何东西!

我尝试了无数种传递变量的方法,但我认为 html 例程中发生了一些事情,我没有得到。

谢谢。

更新:

这是它的调用方式:

    this.$el.attr('data-id', tmplData.id).
          data('id', tmplData.id).html($.tmpl(this.template, tmplData));

其中 this.template 是模板文件,tmplData 是 JSON,其中包括 $description 和其他所需的变量。

另一个更新:

 {{html '<p>string</p>'}}

确实按预期运行。但

 {{html $another_variable}}

即使 $another_variable 中没有 HTML,也无法产生任何输出。

另一个更新:

我也试过:

 ${$item.html(description)}

并将对模板的调用更改为

 this.$el.attr('data-id', tmplData.id).
         data('id', tmplData.id).
         html($.tmpl(this.template, tmplData, {
            truncate: _.truncateStrip,
            html: _.html,
        }));

并编写了一个自定义的 html 例程来按照建议的方式传递字符串:

 html: function(str) {
        return str;
    }

但仍然没有骰子。

4

2 回答 2

15

答案是:

{{html description}}

我很早就尝试过,但是因为我在大括号内留下了杂散的空格,所以它没有正确解释。

:-(

于 2013-02-07T02:13:19.803 回答
0

如果您打开源代码,您可以修改进行编码的行。我没有看到将其关闭的选项,因此这可能是您最简单的解决方案。

改变:

encode: function( text ) {
            // Do HTML encoding replacing < > & and ' and " by corresponding entities.
            return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
        }

encode: function( text ) {
            // Do HTML encoding replacing < > & and ' and " by corresponding entities.
            return text;        
}
于 2013-02-07T01:26:07.873 回答