如何在Haml中包含内联JavaScript?
我如何编写类似这样的内容以包含在模板中,而不是在Haml中如何在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
<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: [["$","$"],["\\(","\\)"]]
}
});