2012-02-01 3 views
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 
+0

'$(document).ready()'の後に '.comment_form'を追加していますか? –

+0

いいえ、私はそうは思わないが、私も私が従うとは思わない。私は本当にjavascriptに新しいです。 – John

+0

@mu_is_too_short、私は今理解していると思う、それはそれだと思う。 。最初に送信されたときに.comment_formを含むhtmlをレンダリングします。 。どのように私はこれを回避するか、それを修正するには? – John

答えて

2

、私はこの答えが必要とされているかわかりません。それでもフォームを再レンダリングしたい場合は、新しい要素がページに追加された後に、その要素を再アーヤする必要があります。再レンダリングの後に実行されるJSにその$('.comment_form').ajaxForm(options)を追加するだけです。

あなたの応答は、ドキュメントから前のフォームを削除してから新しいものを追加するということです。これが起こると、前のフォーム要素に「アタッチされている」可能性のあるJSが要素とともに削除されます。レスポンスが新しいフォーム要素を作成する場合は、新しい要素に特別なJS追加要素を必ず適用する必要があります。

optionsの宣言が範囲外になっているため、応答JSにoptionsを再定義してください。オプション+ ajaxingを別の関数function ajaxify_formsと呼ばれる別の関数に置くことができ、その関数をドキュメント上で呼び出し、フォーム要素を置き換えるたびに呼び出すことができます。

関連する問題