Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Haml中包含内联JavaScript?_Javascript_Jquery_Haml - Fatal编程技术网

如何在Haml中包含内联JavaScript?

如何在Haml中包含内联JavaScript?,javascript,jquery,haml,Javascript,Jquery,Haml,我如何编写类似这样的内容以包含在模板中,而不是在Haml中 <script> $(document).ready( function() { $('body').addClass( 'test' ); } ); </script> $(文档).ready(函数(){ $('body').addClass('test'); } ); 文档:所以我尝试了上面的:javascript,它可以工作:)但是HAML将生成的代码包装在CDATA中,如下所示: <scr

我如何编写类似这样的内容以包含在模板中,而不是在Haml中

<script>
$(document).ready( function() {
  $('body').addClass( 'test' );
} );
</script>

$(文档).ready(函数(){
$('body').addClass('test');
} );

文档:

所以我尝试了上面的:javascript,它可以工作:)但是HAML将生成的代码包装在CDATA中,如下所示:

<script type="text/javascript">
  //<![CDATA[
    $(document).ready( function() {
       $('body').addClass( 'test' );
    } );
  //]]>
</script>

实际上,您可以像Chris Chalmers在回答中所做的那样,但必须确保HAML不会解析JavaScript。当您需要使用与
text/javascript
不同的类型时,这种方法实际上非常有用,这是我为
MathJax
所需要的

您可以使用
plain
过滤器防止HAML解析脚本并抛出非法嵌套错误:

%script{type: "text/x-mathjax-config"}
  :plain
    MathJax.Hub.Config({
      tex2jax: {
        inlineMath: [["$","$"],["\\(","\\)"]]
      }
    });
我用的是哈姆。原文如下:


{%for(var i=0,file;file=o.files[i];i++){%}
{%if(file.error){%}
{%=文件名%}
{%=o.formatFileSize(file.size)%}
{%=locale.fileupload.error%}{%=locale.fileupload.errors[file.error]| | file.error%}
{%}其他{%}
{%if(file.thumbnail_url){%}
{% } %}
{%=o.formatFileSize(file.size)%}
{% } %}
{%=locale.fileupload.destroy%}
{% } %}

Haml没有为我添加
CDATA
,如果js中有任何不规则的缩进,
%script
对我也不起作用。这不起作用,在纯文本中抛出非法嵌套。如果需要为标记添加属性,例如id(这是原始问题),它会更好。我使用的是haml 4.0.7–您可以在haml选项(--cdata)中关闭cdata包装器,这很重要(我认为)。普通过滤器对于解决javascript模板问题非常有用。谢谢我使用的是fileupload jquery(),它在haml中包含了很多js模板,而且只有:普通过滤器可以工作!更多细节,请阅读我的答案。
 %script{:type=>"text/javascript"}
  //your code goes here - dont forget the indent!
%script{type: "text/x-mathjax-config"}
  :plain
    MathJax.Hub.Config({
      tex2jax: {
        inlineMath: [["$","$"],["\\(","\\)"]]
      }
    });