2011-12-30 23 views
8

Tôi đang cố gắng xuất một số j nội tuyến trên một trang. Tôi không thực sự muốn thêm nó vào bất kỳ tập tin JS vì nó là như vậy aribtrary và sử dụng một lần. Điều đó đang được nói, tôi đang sử dụng haml và cũng cố gắng sử dụng content_for để đặt JS sau khi jquery được tải từ bố cục.HAML Có nhiều dòng Khi sử dụng content_for, cho JavaScript

Vấn đề là Haml không thích văn bản nhiều dòng được trình bày thụt (tôi nghĩ)

Tôi cố gắng để làm như sau:

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

Trong cách bố trí của tôi, tôi có:

= yield(:javascript) 

Điều gì thực sự hiệu quả nếu tôi chỉ có 1 dòng sau câu lệnh content_for.

Trả lời

15

Cú pháp đúng sẽ là:

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

Chú ý các dấu gạch ngang so với dấu bằng và :javascriptHAML filter. HAML hoạt động tốt với nhiều dòng miễn là nó được thụt lề 2 dấu cách.

Và sau đó trong phần khác của xem của bạn:

= content_for(:javascript) 
+1

Cảm ơn này làm việc. Điều duy nhất cần lưu ý là nếu bạn có nội dung cho javascript đến từ nhiều trang, nó sẽ đặt trong một thẻ script cho mỗi người trong số họ. các haml: javascript kết thúc tốt đẹp

0

này được gọi là escaping, và trong trường hợp này, bạn trốn thoát, ergh, thụt đầu dòng:

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

Các vấn đề liên quan