2010-02-09 12 views
9

Sono curioso di sapere quale sia il modo migliore per caricare un binario parziale con jquery. Finora ho cercato una soluzione che non funziona:carico parziale con jquery e rotaie

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() { 
alert('Load was performed.'); 
}); 

è la soluzione migliore per costruire un'azione separata e/o il controller per questo e impostare un percorso? Sto chiedendo perché la prima soluzione di lavoro sembra più facile, forse non così riposante.

Grazie.

+0

proprio come una nota, non è possibile utilizzare .html() per caricare sei parziali sia. Anche se lo chiami con il codice rubino. Questo perché rende l'intera forma tra virgolette e incasina tutto. Ti suggerirei un altro modo se ne conoscessi uno, anche se è quello che sto cercando. –

risposta

8

Non si dovrebbe essere in grado di accedere ai file Template (.erb) dalle richieste HTTP, questa è una pratica molto negativa. Ti suggerisco di metterli all'esterno del percorso dei tuoi server web e accedervi solo attraverso la tua applicazione.

Non sono sicuro di Rails, ma suppongo che sia necessario creare un controller separato (o qualsiasi altra cosa) per farlo.

EDIT questo è perché i file .erb sono Embedded file di Ruby, e se si tenta di richiedere loro si ottengono tutti i dati non desiderati, come <%= page_title %>, che non si desidera visualizzare gli utenti. Pertanto è necessario passare questi file .erb attraverso l'applicazione Rails in modo che vengano interpretati correttamente in HTML.

+0

ok - grazie per l'intuizione. Lo strutturerò di conseguenza. – Christian

3

Il motivo per cui il codice non funziona è che le guide non espongono i file di visualizzazione all'esterno. Per ottenere la cosa che si desidera, avrete bisogno di un'azione che renderebbe questo parziale:

def image_gallery 
    render :partial => "image_gallery" 
end 

Inoltre v'è un plugin chiamato jRails che sostituisce helper Ajax standard (che utilizzano prototipo) con quelli jquery-oriented equivalenti. Nel tuo caso useresti qualcosa come

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %> 

E ancora di più, in Rails 3 non ne avrai bisogno. Vedi this link.

+0

grazie - Non vedo l'ora di vedere tutte le novità in Rails 3. – Christian

3

Con rotaie 3 che si potrebbe fare ...

regolatore

@content = '/some/partial' 

vista - sia haml.erb (html.erb) o js.erb

$('#myDiv').html("<%= escape_javascript render @content %>"); 

Si potrebbe provare questo se rotaie 2 (unico prototipo disponibile a meno noConflict aggiunto) ...

Nel controllore

@content = render :partial=>"https://stackoverflow.com/users/cool_partial" 

chiamare i tuoi js

myFunction(#{@content.to_json}) 

La vostra funzione ...

myFunction = function(content){ 

    $("myDiv").html(content); 

} 

Sono d'accordo con il neutrino che questo potrebbe essere gestito meglio tramite un'azione.

def get_partial 
    render 'some/partial' 
end 

Spero che questo aiuti

3

Un'altra alternativa:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>'); 
Problemi correlati