Как использовать jQuery Form Plugin с шаблоном Rails js.erb? - PullRequest
0 голосов
/ 12 июня 2009

Я использую плагин jQuery Form с моим приложением Rails. У меня есть такая форма:

<form action="/comments" id="comment_form" method="post">
  <textarea cols="60" id="comment_comment" name="comment[comment]" rows="3"></textarea>
  <input id="comment_submit" name="commit" type="submit" value="Add comment" />
</form>  

Мой файл application.js имеет:

jQuery.ajaxSetup({
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});

$(document).ready(function(){
  $("#comment_form").ajaxForm();
});

Контроллер Мои комментарии выглядит так:

def create
  @comment = Comment.new(params[:comment])

  respond_to do |wants|
    if @comment.save
      flash[:notice] = 'Added comment.'
      wants.js
    end
  end
end

И у меня есть некоторый код jquery в /views/comments/create.js.erb, например:

$("#comment_form).hide();

и некоторые другие вещи.

Моя проблема в том, что jQuery-код внутри create.js.erb никогда не происходит (то есть форма не скрывается). Если я использую это в application.js вместо этого (спасибо Railscast за этот код)

jQuery.fn.submitWithAjax = function() {
  this.submit(function() {
    $.post(this.action, $(this).serialize(), null, "script");
    return false;
  })
  return this;
};

jQuery.ajaxSetup({
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});

$(document).ready(function(){
  $("#comment_form").submitWithAjax();
});

все работает нормально. Весь код в create.js.erb прекрасно работает! Я бы предпочел использовать плагин jQuery Form, но я не понимаю, как заставить работать код create.js.erb. Если сделать что-то вроде:

$("#comment_form").ajaxForm({success: function(){$("comment_form").hide()}});

тогда этот код jQuery работает. Но мне нужно запустить шаблон erb (потому что я делаю такие вещи, как рендеринг частичного внутри).

Спасибо за любые идеи.

1 Ответ

1 голос
/ 17 июня 2009

Я понял это. Во время просмотра этого экрана http://blog.edgecase.com/2009/6/15/ajax-file-uploads-made-easy-screencast - я заметил, что он добавил dataType: 'script' Итак, вместо

$("#comment_form").ajaxForm();

Мне нужно

$("#comment_form").ajaxForm({dataType: 'script'});

Works! И это прямо в документации jQuery Form - "если dataType == 'script", ответ сервера оценивается в глобальном контексте "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...