Использование jQuery Form Plugin с Rails, работает с первым постом комментария, но не после - PullRequest
0 голосов
/ 02 февраля 2012

Я использую плагин JQuery Form следующим образом:

$('document').ready( ->
  options = 
    beforeSubmit: markComment
  $('.comment_form').ajaxForm(options)
)

markComment = (arr, $form, options) ->
  $form.closest('.comment_area').addClass('add_comment_here')

Когда комментарий создается, следующий javascript называется серверной стороной:

$('.add_comment_here').html("<%= escape_javascript(render(:partial =>'activities/comments', :locals => {:activity => @activity})) %>")
$('.add_comment_here').removeClass('add_comment_here')
$('.add_comments_box').fadeOut()

Сообщение с комментарием работает нормально в первый раз, но со второй попытки я получаю «Шаблон отсутствует», как если бы форма отправлялась до того, как был вызван метод AJAX. Как заставить его работать одинаково для нескольких комментариев?

Это тег form_tag в хамле:

=form_tag({ :action => 'create', :controller => 'comments' }, { :class => 'comment_form'}) do

1 Ответ

2 голосов
/ 02 февраля 2012

Судя по комментариям выше, я не уверен, что этот ответ нужен.Если вы по-прежнему хотите перерисовать форму, вам просто нужно повторно добавить новый элемент после добавления его на страницу.Просто добавьте это $('.comment_form').ajaxForm(options) в JS, который запускается после повторного рендеринга.

Я считаю, что происходит то, что ваш ответ в итоге удаляет предыдущую форму из документа, а затем добавляет новую.Когда это происходит, любой JS, который мог быть «присоединен» к этому предыдущему элементу формы, удаляется вместе с элементом.Если ваш ответ создает совершенно новый элемент формы, вы должны обязательно применить любые специальные дополнения JS к совершенно новому элементу.

Также обязательно переопределите options в вашем ответе JS, так какпредыдущая декларация options выйдет из области видимости.Возможно, вы просто сможете поместить параметры + ajaxing в отдельную функцию, которая называется что-то вроде function ajaxify_forms, и просто вызывать эту функцию в готовом документе, а затем также всякий раз, когда вы заменяете элемент формы.

...