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()

コメント投稿は最初は正常に機能しますが、2回目の試行で、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 に答える