HAML使用content_for时如何在多行中使用JavaScript?

8

我正在尝试在页面上输出一些内联js。我不想将其添加到任何JS文件中,因为它是如此的随意和一次性使用。话虽如此,我正在使用haml,并且尝试使用content_for来在布局加载jquery后放置JS。

问题在于haml不喜欢缩进的多行文本(我认为是这样)

我正在尝试做以下事情:

=content_for :javascript do
  $(function(){
    $("#sell_tickets_here").live("vclick",function(){
      if($(this).is("checked"))
        $("#tickets_here").display("inline");
      else
        $("#tickets_here").display("none");
    });
  });

在我的布局中,我有以下内容:
  = yield(:javascript)

如果在content_for语句之后只有一行代码,这个方法实际上是有效的。

2个回答

16

正确的语法应该是:

- content_for :javascript do
  :javascript
    $(function(){
      $("#sell_tickets_here").live("vclick",function(){
        if($(this).is("checked"))
          $("#tickets_here").display("inline");
        else
          $("#tickets_here").display("none");
      }); 
    });

注意破折号和等号以及:javascript HAML过滤器之间的区别。只要缩进两个空格,HAML就可以很好地处理多行。

然后在你视图的另一部分中:

= content_for(:javascript)

1
谢谢,这个方法可行。需要注意的是,如果你有来自多个页面的JavaScript内容,它会为每个页面都插入一个脚本标签。Haml :javascript会在代码周围包裹<script><[cdata。对我来说很有效。目前为止没问题!只是做个记录。感谢你的帮助。 - Parris

0

这被称为转义, 在这种情况下,您需要转义缩进:

=content_for :javascript do / $(function(){ / $("#sell_tickets_here").live("vclick",function(){ / if($(this).is("checked")) / $("#tickets_here").display("inline"); / else / $("#tickets_here").display("none"); / }); / });


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接