2011-01-05 5 views
6

In letzter Zeit habe ich in ein paar Anwendungen, die js.erb verwenden, laufen und ich bin nicht wirklich sicher, wie man es benutzt ... hier ist der Code unten. Kann mir jemand helfen zu verstehen, wie das funktioniert?Wie funktioniert js.erb

in der routes.rb Datei

map.resources :player_emails 

mein Controller player_emails_controller.rb in der Aktion erstellen

def create 
@player_email = PlayerEmail.create(params[:player_email]) 
if @player_email.save 
    @response_txt = "The player has been emailed." 
    PlayerEmailsMailer.deliver_pattern_email(@something, @player_email, request.host_with_port) 
    @error = false 
else 
    @error = true 
    @response_txt = "Please make sure you entered your name and a valid email address." 
end 
end 

dann habe ich die Datei player_emails/create.js.erb

$('#player_email_ind').hide(); 
$('#player_email_submit').show(); 
$('#player_response_msg').html("<%= escape_javascript @response_txt %>").fadeIn(); 
<% unless @error %> 
$('#player_email_form')[0].reset(); 
<% end %> 

ich weiß, was die jquery geht aber Ich weiß nicht, wie das diemachtAnruf. Ist es nur automatisch einen Anruf ajax tun, wenn es eine js.erb ist ... kann mir jemand den Weg erklären, das funktioniert und warum ich eine respond_to in der Controller-Aktion brauchen nicht sagen, es ist dieses format.js

+1

Ich bin nur neugierig, ob es ein Tutorial zum Schreiben von .js.erb da draußen gibt ... –

Antwort

3

Hat Ihr Formular Schaltfläche ein Muss :remote => true drauf? In diesem Fall könnte JavaScript in rails.js oder application.js vorhanden sein, das automatisch über AJAX gesendet wird. Die Schlussfolgerung ist, dass es irgendwo irgendwo JavaScript geben muss, das einen AJAX-Aufruf macht und nach einer js oder JSON Antwort fragt, andernfalls wäre es eine html Anfrage.

Warum brauchen Sie keinen respond_to Block, ich bin mir nicht ganz sicher. Vielleicht, da der Anruf immer von AJAX getätigt wird und es eine js.erb-Vorlage gibt, macht er einfach seine Sache, ohne sich zu beschweren. Gibt es überhaupt eine html.erb-Vorlage? Wenn nicht, versuchen Sie ein reguläres Formular zu senden und sehen Sie, ob es sich beschwert.

6

Wenn eine js (ajax) -Anforderung gestellt wird, wird sie durch Rendern der Datei js.erb und umgekehrt reagieren.

Dies ist das Standardverhalten, das durchgeführt wird:

respond_to do |format| 
    format.js{ 
     render :template => 'create.js.erb' 
    } 
    format.html{ 
     render :template => 'create.html.erb' 
    } 
    end 
5

Wenn das Formular abgeschickt wird, tut es ein POST /player_emails. Die Ressourcendeklaration in routes.rb stellt sicher, dass die Anforderung von PlayerEmailsController#create verarbeitet wird.

Der Controller ist für die Verarbeitung jedes empfangenen Formats verantwortlich. Im Falle eines AJAX-Aufrufs lautet das Format "js" und wird festgelegt, indem die Formatzeichenfolge am Ende der URL explizit (/player_emails.js) oder (wahrscheinlicher) hinzugefügt wird, indem das Format aus dem Anforderungsheader abgeleitet wird.

In Ihrem Fall erwartet die create Aktion nichts anderes als AJAX, also dauert es eine Abkürzung und unterlässt die respond_to und Blöcke. Der Controller hat bereits herausgefunden, dass das Format 'js' ist. Wenn create abgeschlossen ist, wird die Standardaktion des Renderns der entsprechenden Vorlage für das Format (create.js.erb) ausgeführt.

Verwandte Themen