2009-10-25 33 views
33

Tôi có một đường ray tạo hành động mà gửi lại một số jquery trong một tập tin:Làm thế nào để gửi lại js.haml trong đường ray

create.js.erb

var appearance = $("<%= escape_javascript(render(:partial => @appearance)) %>").effect("highlight", {color: '#E6ff00'}, 2000); 
$("#sortable").append(appearance); 
$("#new_appearance")[0].reset(); 

Tôi đã bắt đầu sử dụng HAML và muốn biết cách tôi nên chuyển đổi điều này. Tôi có thể sử dụng js.haml không? Nếu vậy đánh dấu trông như thế nào?

Trả lời

69

Thực ra, việc trả về JS trong HAML là khá dễ dàng, chỉ cần sử dụng bộ lọc: plain và kèm theo bất kỳ thứ gì bạn muốn đánh giá trong # {}.

:plain 
    var appearance = $("#{escape_javascript(render(:partial => @appearance)}").effect("highlight", {color: '#E6ff00'}, 2000); 
    $("#sortable").append(appearance); 
    $("#new_appearance")[0].reset(); 

Không sử dụng bộ lọc javascript: vì nó sẽ bao gồm mọi thứ trong thẻ không cần thiết.

Nếu bạn cần sử dụng một số logic, chỉ cần đặt: plain bên trong lồng.

- if params[:printing] 
    :plain 
    $('#print-view').html("#{escape_javascript(render 'print_preview')}"); 

Xin lỗi ERB.

+12

Lưu ý rằng ': plain' không cần thiết trong các phiên bản mới nhất của haml. – ocodo

+0

Tôi vẫn nhận được html thô bằng cách sử dụng đường ray 3 và haml 3.1.7 –

3

Haml thực sự muốn tạo HTML. Bạn có thể, theo lý thuyết, sử dụng create.js.haml, nhưng ERB có ý nghĩa hơn nhiều khi bạn viết Javascript.

+8

Việc giải thích tại sao việc sử dụng ERB có ý nghĩa hơn khi bạn viết Javascript? Tôi tìm thấy HAML là tốt, sạch hơn và làm việc với Coffeescript là tốt. ty – Florin

+2

@Florin Vì Haml được thiết kế đặc biệt cho cú pháp HTML và XML. Khi bạn tạo ra bất kỳ thứ gì khác với nó, bạn cần phải làm quá nhiều thoát hoặc làm việc khác xung quanh thực tế là đầu ra không phải là HTML hoặc XML. Haml của sạch hơn tất cả các quyền, nhưng chỉ cho HTML/XML. –

+1

không yêu cầu thoát nếu bạn có thể sử dụng các bộ lọc như: javascript hoặc: plain, xem câu trả lời được chấp nhận ở trên. – Florin

0

Trong một js.haml nó sẽ giống như thế

!= "var appearance = $('<%= escape_javascript(render(:partial => @appearance)) %>').effect('highlight', {color: '#E6ff00'}, 2000);" 
!= "$('#sortable').append(appearance);" 
!= "$('#new_appearance')[0].reset();" 

Lưu ý HAML! = Cú pháp, giúp ngăn chặn các văn bản được tạo ra từ việc HTML trốn thoát. Tôi đồng ý rằng ERB phù hợp hơn ở đây, nhưng đối với cổ phần nhất quán, bạn vẫn có thể muốn đi theo con đường HAML.

1

Dường như bạn không cần! = Trước mỗi dòng. Các công trình sau đây cho tôi tốt. Im sử dụng Rails 3 và phiên bản mới nhất của HAML

$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}'); 
Các vấn đề liên quan