2011-08-29 21 views
6

Tôi muốn hiển thị một phần trong tệp js.erb của mình để tôi có thể sử dụng HTML được tạo trong Javascript của mình. Dưới đây là một số mã để phục vụ như một ví dụ.Hiển thị một phần bên trong js.erb. Có thể lấy chuỗi thô để tôi có thể xóa khoảng trống không?

create.js.erb

$(function(){ 
    var html = "<%= render(:partial => `pretty_box`) %>"; 
    $("#container").prepend(html); 
}); 

_pretty_box.html.haml

.pretty_box_container 
    .title 
    Something Pretty 

Khi create.js.erb được trả lại, tôi nhận được như sau:

$(function(){ 
    var html = "<div class="pretty_box_container> 
    <div class="title"> 
     Something Pretty 
    </div> 
</div>"; 
    $("#container").prepend(html); 
}); 

Như bạn mong đợi, điều này phá vỡ javascript của tôi. Tôi cần phải loại bỏ khoảng trắng từ kết quả của việc hiển thị một phần. Vấn đề là giá trị trả lại của render là đối tượng ActiveSupport::SafeBuffer, ghi đè tất cả các phương pháp "không an toàn" (xem UNSAFE_STRING_METHODS), bao gồm strip. Vì vậy, hãy gọi số render(:partial => pretty_box ).strip HTML mã hóa toàn bộ chuỗi.

Tôi đã thử tất cả các loại kết hợp bằng các phương pháp html_safe hoặc to_s. Chúng không hoạt động vì chúng trả về self và việc sử dụng raw không hoạt động vì nó gọi là to_s.html.safe.

Tôi biết tôi có thể thêm >< ký tự vào HAML của tôi, nhưng tôi không muốn làm điều đó cho mọi dòng của từng phần.

Trả lời

8

Sự cố không phải là khoảng trắng, nhưng có dấu ngoặc kép.

$(function(){ 
    var html = "<div class="pretty_box_container> 
         ^
         This is where you go wrong 

Hãy thử điều này:

$(function(){ 
    var html = "<%= escape_javascript(render(:partial => 'pretty_box')) %>"; 
    $("#container").prepend(html); 
}); 

Check-out this answer trên StackOverflow cho một lời giải thích về escape_javascript.

+0

Cảm ơn bạn đã xác thực. Tối nay tôi sẽ thử cái này. – John

+0

Đã hoạt động. Cảm ơn! – John

+0

Bạn được chào đón. Vui vì nó hoạt động. – Mischa