Как работает js.erb - PullRequest
       2

Как работает js.erb

6 голосов
/ 05 января 2011

В последнее время я столкнулся с несколькими приложениями, которые используют js.erb, и я не совсем уверен, как его использовать ... вот код ниже.Может кто-нибудь помочь мне понять, как это работает?

в файле routes.rb

map.resources :player_emails

мой контроллер player_emails_controller.rb в действии создания

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

, затем яу меня есть файл 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 %>

я знаю, что происходит с jquery, но я не знаю, как это делает вызов ajax.Делает ли он просто автоматический вызов ajax, когда js.erb ... может кто-нибудь объяснить, как это работает, и почему мне не нужен response_to в действии контроллера, сообщив, что это format.js

Ответы [ 3 ]

7 голосов
/ 05 января 2011

Если будет сделан запрос js (ajax), он ответит путем рендеринга файла js.erb и наоборот.

Это поведение по умолчанию, которое выполняется:

  respond_to do |format|
    format.js{
      render :template => 'create.js.erb'
    }
    format.html{
      render :template => 'create.html.erb'
    }
  end
5 голосов
/ 06 января 2011

Когда форма отправлена, она выполняет POST к /player_emails. Объявление ресурса в routes.rb обеспечивает обработку запроса PlayerEmailsController#create.

Контроллер отвечает за обработку каждого формата, который он получает. В случае вызова AJAX форматом является «js», и он устанавливается путем явного добавления строки формата в конец URL (/player_emails.js) или (более вероятно) путем вывода формата из заголовка запроса.

В вашем случае действие create не ожидает ничего, кроме AJAX, поэтому оно использует ярлык и пропускает блоки respond_to и format. Контроллер уже выяснил, что форматом является 'js', поэтому, когда create завершен, он выполняет действие по умолчанию для отрисовки соответствующего шаблона для формата (create.js.erb).

3 голосов
/ 05 января 2011

На кнопке отправки формы есть :remote => true?Если это так, в rails.js или application.js может быть какой-то JavaScript, который автоматически отправляет через AJAX.Суть в том, что где-то должен быть какой-то JavaScript, который делает вызов AJAX и запрашивает ответ js или JSON, в противном случае это будет запрос html.1006 * блок, я не совсем уверен.Возможно, поскольку AJAX всегда выполняет вызов и имеется шаблон js.erb, он просто делает свое дело, не жалуясь.Есть ли вообще шаблон html.erb?Если нет, попробуйте сделать регулярную отправку формы и посмотрите, жалуется ли она.

...