8

ページにインラインjsを出力しようとしています。それは非常に不合理で一度だけ使用されるので、私はそれをJSファイルに追加したくありません。そうは言っても、私はhamlを使用しており、jqueryがレイアウトからロードされた後にJSを配置するためにcontent_forも使用しようとしています。

問題は、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ステートメントの後に1行しかない場合に実際に機能します。

4

2 に答える 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は、2スペースインデントされている限り、複数行で問題なく機能します。

そして、あなたの見解の他の部分では:

= content_for(:javascript)
于 2011-12-30T01:33:34.060 に答える
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"); / }); / });

于 2014-03-12T14:34:04.933 に答える