2011-01-05 13 views
6

Ultimamente ho incontrato alcune applicazioni che utilizzano js.erb e non sono proprio sicuro di come utilizzarlo ... ecco il codice qui sotto. Qualcuno può aiutarmi a capire come funziona?Come funziona js.erb

nel routes.rb file di

map.resources :player_emails 

mio controller player_emails_controller.rb nell'azione creare

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 

allora ho il file 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 %> 

So quello che il jquery sta andando, ma non so come stia facendo ilChiamata. Ha solo fare automaticamente una ajax chiamata quando c'è una js.erb ... qualcuno può spiegare il modo in cui funziona e perché io non bisogno di un respond_to nell'azione di controllo dicendo che questo è format.js

+1

sono curioso di sapere se esiste un tutorial per scrivere .js.erb là fuori ... –

risposta

3

Il vostro modulo pulsante di invio hanno un :remote => true su di esso? In tal caso, potrebbe esserci qualche codice JavaScript nello rails.js o application.js che invia automaticamente tramite AJAX. In conclusione, ci deve essere qualche JavaScript da qualche parte che sta facendo una chiamata AJAX e chiede una risposta js o JSON, altrimenti sarebbe una richiesta HTML.

Per quanto riguarda il motivo per cui non è necessario un blocco respond_to, non ne sono del tutto sicuro. Forse dal momento che la chiamata viene sempre effettuata da AJAX e c'è un modello js.erb disponibile, fa semplicemente la sua cosa senza lamentarsi. Esiste un modello html.erb a tutti? In caso contrario, prova a inviare un modulo normale e vedere se si lamenta.

6

Se viene effettuata una richiesta js (ajax), risponderà eseguendo il file js.erb e viceversa.

Questo è il comportamento predefinito che viene eseguita:

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

Quando il modulo viene inviato, fa un POST /player_emails. La dichiarazione della risorsa in routes.rb assicura che la richiesta sia gestita da PlayerEmailsController#create.

Il controller è responsabile della gestione di ogni formato ricevuto. Nel caso di una chiamata AJAX, il formato è 'js' e viene impostato aggiungendo esplicitamente la stringa di formato alla fine dell'URL (/player_emails.js) o (più probabilmente) deducendo il formato dall'intestazione della richiesta.

Nel tuo caso, l'azione create non prevede altro che AJAX, quindi accetta una scorciatoia e omette i blocchi respond_to e format. Il controller ha già capito che il formato è 'js', quindi quando create è completo, viene eseguita l'azione predefinita di rendering del modello appropriato per il formato (create.js.erb).

Problemi correlati