为什么把手将脚本模板编译为CDATA

时间:2018-12-03 08:25:51

标签: javascript jquery html handlebars.js

我编写了一个编译车把模板并附加到html的函数。 我在项目中使用了数千次车把模板,一切顺利。 我不得不提到它将在localhost中正确呈现,但是在服务器中它将返回CDATA。 但是在这种情况下,把手的输出是这样的,并且会引起很多问题。下面是template.php文件中的模板html

<script id="w-l-template" type="text/x-handlebars-template">
 <div data-name="name{{ID}}"></div>
 .....
</script>

这是一个名为my.js的js文件中的函数

var num = 2;
function add_name(){
   var out = $('#w-l-template').html();
   var template = Handlebars.compile(out);
   var data={
     ID:num
   }
   var res=template(data);
   $('[data-main-content="main"]').append(res);
   num = num+1;
}

$(document).on('click', '#add', function(){
    add_name();
});

但是在通过把手渲染之后,我将在第一行获得CDATA,就像这样 <!--[CDATA[*/<div class="col-lg-12 "data-name="2"-->

1 个答案:

答案 0 :(得分:0)

我知道这个答案有点晚了,但是今天我遇到了类似的问题。我发现Handlebars并没有将CDATA添加到我的HTML中,实际上是Drupal。有时我们使用Drupal的内联编辑器创建页面,因此我将通过Full HTML编辑器添加HTML。

不幸的是,如果您未在Drupal中配置HTML编辑器以不重写损坏的HTML,它认为Handlebar脚本语法已损坏,则Drupal将尝试修复标签并添加CDATA,这会使您的标签被注释掉。然后,把手将尝试为该新的注释标签建立模板,并输出注释掉的标签。令人沮丧!但是希望我的回答对您有所帮助(或者如果将来再次遇到这种情况)。

基本上是TL:DR,它不是Handlebars,可能是您的PHP(或使用PHP的CMS)中的某些设置可能试图“修复” Handlebars模板,因为它认为HTML已损坏。