2011-08-29 6 views
6

Chcę renderować częściowe w moim pliku js.erb, aby można było używać wygenerowanego kodu HTML w moim JavaScript. Oto przykładowy kod.Renderowanie częściowe wewnątrz js.erb. Czy możliwe jest uzyskanie nieprzetworzonego łańcucha znaków, aby można było usunąć białe znaki?

create.js.erb

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

_pretty_box.html.haml

.pretty_box_container 
    .title 
    Something Pretty 

Kiedy create.js.erb jest renderowany, mam następujące:

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

Jak można się spodziewać, to łamie mój javascript. Muszę usunąć białe znaki z wyniku renderowania częściowego. Problem polega na tym, że wartość zwracana obiektu render to obiekt ActiveSupport::SafeBuffer, który zastępuje wszystkie "niebezpieczne" metody (patrz UNSAFE_STRING_METHODS), w tym strip. W ten sposób wywołanie render(:partial => pretty_box ).strip koduje cały ciąg znaków.

Próbowałem różnych kombinacji za pomocą metod html_safe lub to_s. Nie działają, ponieważ zwracają self, a używanie raw nie działa, ponieważ wywołuje to_s.html.safe.

Wiem, że mogę dodać znaki > i < do mojego HAML, ale nie chcę tego robić dla każdego wiersza każdej części.

Odpowiedz

8

Problem nie jest białymi znakami, ale cytatami.

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

Spróbuj tego:

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

Check out this answer na StackOverflow o wyjaśnienie o escape_javascript.

+0

Dzięki, mischa. Spróbuję tego dziś wieczorem. – John

+0

Pracował. Dzięki! – John

+0

Nie ma za co. Cieszę się, że to działało. – Mischa

Powiązane problemy