**問題は実際にはレールがajax:success関数にバインドできないことにあることがわかったため、この投稿を編集しました。
***レールの使用3.2.3
読んで助けてくれてありがとう。
次のように、ajax:success ofaitemの削除に簡単なフェードアウト機能を追加しています。
$(document).ready( jQuery(function($) {
$('.delete').bind('ajax:success', function() {
$(this).closest('div').fadeOut();
});
}));
#For some reason had to pass the $ into the function to get it to work,
#not sure why this is necessary but doesn't work unless that is done.
この後、ユーザーが何かを追加したときに目立たないjQueryを使用してオブジェクトを作成し、それらにも削除ボタンを機能させたいと思いました。新しいアイテムの作成後に呼び出されるcreate.js.erbファイルを作成しました。作成は正常に機能しますが、削除ボタンでajax:successイベントにアクセスできません。
クリックするとデータベースからデータが削除されますが、.fadeOutがバインドされることはないため、データは消えません。create.js.erbは次のとおりです。
#$("div").append(html) here, then call the function below to try and bind the ajax:success function
$('.delete').bind('ajax:complete', function() {
$(this).closest('div').fadeOut();
});
これをクリック関数にバインドするように変更すると、機能しますが、これは失敗したajax呼び出しの原因にはなりません。
#$("div").append(html) here, then call the function below to try and bind the ajax:success function
$('.delete').bind('click', function() {
$(this).closest('div').fadeOut();
});
したがって、アイテムが作成された後、何かがajax:successにバインドされている必要があります。なぜこれが起こっているのか分かりますか?新しくレンダリングされたアイテムにajaxイベントを認識させるために、Railsで何か特別なことをする必要がありますか?どんな方向でも大歓迎です!
PS誰かがそこで問題を検出できるかもしれない場合に備えて、deleteメソッドのコントローラーを以下に示します。
def destroy
@user = User.find(params[:user_id])
@item = @user.item.find(params[:id])
@item.destroy
respond_to do |format|
format.html { redirect_to user_path(@user) }
format.json { head :no_content }
format.js { render :nothing => true }
end
end