2009-06-12 2 views
0

Я использую плагин формы jQuery с моим Rails-приложением. У меня есть форма, как это:Как использовать jQuery Form Plugin с Rails js.erb шаблоном?

<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 like:

$("#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

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

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

мне нужен

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

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

Смежные вопросы