2011-12-30 14 views
8

Próbuję wyjściowe niektóre inline js na stronie. Naprawdę nie chcę go dodawać do żadnego pliku JS, ponieważ jest tak aribracyjny i jednorazowy. Mówiąc to, używam haml, a także próbuję użyć content_for w celu umieszczenia JS po załadowaniu jquery z layoutu.HAML O wiele linii przy użyciu content_for, dla JavaScript

Problemem jest to, że haml nie lubi tekstu wielowierszowego, który jest wcięty (chyba)

Próbuję wykonać następujące czynności:

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

W moim układzie mam:

= yield(:javascript) 

Co faktycznie działa, jeśli mam tylko 1 wiersz po instrukcji content_for.

Odpowiedz

15

Poprawna składnia byłoby:

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

Wskazówka kreskę w stosunku do znaku równości i :javascriptHAML filter. HAML działa dobrze z wieloma liniami, o ile jest wcięty w 2 spacje.

A następnie w drugiej części swojego widzenia:

= content_for(:javascript) 
+1

Dzięki tym pracowali. Jedyną rzeczą, na którą należy zwrócić uwagę, jest to, że jeśli masz zawartość dla javascript pochodzącą z wielu stron, umieścisz w niej znacznik skryptu dla każdego z nich. the haml: javascript wraps

0

ta nazywa escaping, aw tym przypadku ucieczki, ergh, wcięcie:

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

Powiązane problemy