0

我正在使用 JQuery 表单插件,如下所示:

$('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 方法之前提交了表单一样。我如何让它对多个评论起作用?

这是haml中的form_tag:

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

1 回答 1

2

从上面的评论来看,我不确定是否需要这个答案。如果您仍想重新呈现您的表单,那么您只需要确保在将新元素添加到页面后重新对其进行 ajax。只需将其添加$('.comment_form').ajaxForm(options)到重新渲染后运行的 JS 中即可。

我认为正在发生的是,您的回复最终会从文档中删除以前的表单,然后添加一个新表单。发生这种情况时,可能已“附加”到该先前表单元素的任何 JS 将与该元素一起被删除。如果您的响应创建了一个全新的表单元素,您必须确保将任何特殊的 JS 添加应用于全新的元素。

还要确保options在您的响应 JS 中重新定义,因为之前的options声明将超出范围。您可能只能将选项+ ajaxing 放入一个名为类似的单独函数function ajaxify_forms中,然后在文档准备好时调用该函数,然后在您替换表单元素时调用该函数。

于 2012-02-02T00:21:20.500 回答