2011-12-30 13 views
8

ページにいくつかのインラインjを出力しようとしています。私は本当に任意のJSファイルにそれを追加したいとは思わない。つまり、hamlを使用していて、jqueryをレイアウトからロードした後にJSを配置するためにcontent_forを使用しようとしています。JavaScriptのcontent_forを使用中に複数の行を持つHAML

問題は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行しかなければ実際に動作します。

答えて

15

正しい構文は次のようになります。

- 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"); 
     }); 
    }); 

お知らせ等号と:javascriptHAML filter対ダッシュ。 HAMLは2行インデントされていればマルチラインでうまく動作します。

そして、あなたのビューの他の部分で:インデント、これはescapingと呼ばれ、この場合には、あなたがergh、脱出

= content_for(:javascript) 
+1

感謝。注目すべき唯一のことは、複数のページから来るjavascript用のコンテンツを持っている場合、それぞれのスクリプトタグを入れられることです。 haml:javascriptはコードの周りに

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"); / }); /});

関連する問題