** Edité esta publicación porque encontré que el problema está en la incapacidad de los rieles para enlazar a la función ajax: success.jQuery bind ajax: success no funciona en la aplicación rails 3 para elementos recién creados (ajax)
*** El uso de rieles 3.2.3
, gracias por tomarse el tiempo para leer y tratar de ayudar.
añado un desvanecimiento sencilla a cabo la función en el Ajax: éxito de un artículo se va a eliminar, de la siguiente manera:
$(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.
Después de esto, quería crear un objeto con discreta jQuery cuando el usuario añade algo , y tienen botones de eliminación de trabajo en esos también. Hice un archivo create.js.erb que se llama después de crear un nuevo elemento, y la creación funciona bien, pero el botón eliminar no puede acceder al evento ajax: success.
Elimina los datos de la base de datos cuando se hace clic, pero .fadeOut nunca está vinculado a ella, por lo que no desaparece. El create.js.erb es el siguiente:
#$("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();
});
Si cambio este se una a la función de clic, funciona, pero esto no da cuenta de una llamada ajax fallado:
#$("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();
});
Así que algo debe estar vinculado con el ajax: éxito después de que se crea el elemento. ¿Ustedes tienen alguna idea de por qué esto podría estar pasando? ¿Debo hacer algo especial en los rieles para que el elemento recién renderizado reconozca los eventos de Ajax? ¡Cualquier dirección sería muy apreciada!
P.S. El controlador para el método de eliminación es a continuación en caso de que alguien podría ser capaz de detectar un problema allí:
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
¿Es esta una 3.0.x rieles o 3.1/3.2 aplicación? – ScottJShea
Rails 3.2.3 es la versión que estoy usando. Es muy posible que esté escribiendo el código incorrectamente, pero, como preguntaste qué versión de los rieles, tengo que preguntar, ¿conoces un error como este en las versiones anteriores de los rieles o algo así? – Anthony
Ocasionalmente, las personas tendrán jQuery y Prototype activos en el mismo proyecto. Ocurre más a menudo con Rails 3.0.x. Ahora que lo veo de nuevo es posible que desee mover el segundo enlace ('bind_delete_animation') en el' document.ready' en lugar de en una función llamada desde 'document.ready'. Nunca he tenido éxito con el bind estar fuera del doc listo. – ScottJShea