16

Bien, he visto this question sobre este problema causado por múltiples enlaces de jQuery o Prototype, pero puedo confirmar que solo estoy enlazando a jQuery una vez en toda la página. Mi problema es el siguiente: cuando tengo un link_to que confirma una deleción, la ventana emergente muestra dos veces. Aquí está el código aplicable en mi plantilla (escrito en Slim):Rails 3.1 con Asset Pipeline, link_to: ¿confirma el mensaje que se muestra dos veces?

link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete) 

estoy corriendo Rails 3.1.0 con el activo Pipeline encendido, con gem 'jquery-rails' en mi Gemfile, y el siguiente está en mi application.js archivo (que es compilado por Sprockets para la canalización de activos).

//= require jquery 
//= require jquery_ujs 
//= require 'underscore' 
//= require 'backbone' 

que tienen underscore.js y backbone.js en mi directorio /vendor/assets/javascripts/, y los piñones parece encontrar los bien. También he buscado en el archivo application.js que sirve ruedas dentadas, y jQuery es sólo en allí una vez, y jQuery EPU es sólo en una vez. Esto es lo que se ve la cabeza como cuando mi página se representa (He omitido el valor csrf-token para la exhibición, Fwiw).

<head> 
    <meta content="text/html; charset=utf-8" http-equiv="content-type"> 
    <title>Administration</title> 
    <link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" /> 
    <script src="/assets/application.js" type="text/javascript"></script> 
    <meta content="authenticity_token" name="csrf-param" /> 
    <meta content="--token--omitted--" name="csrf-token" /> 
    <script src="/assets/common/subdata.js" type="text/javascript"></script> 
    <link href="/assets/show.css" media="screen" rel="stylesheet" type="text/css" /> 
</head> 

subdata.js tiene algún código-Backbone específica en ella; nada que elegiría incluir jQuery nuevamente. Entonces, ¿cuál es el problema? No tengo un archivo jQuery adicional en ninguna parte de mi proyecto; todo se gestiona a través de la gema jquery-rails. ¿Qué está causando que mi método :confirm se dispare dos veces?

EDITAR: que estaba viendo previamente esta en RC5 de Rails 3.1, pero ahora también estoy viendo en los carriles 3.1 real.

Respuesta

25

Esto me ha pasado porque había ejecutado rake assets:precompile en mi entorno de desarrollo causando la creación de public/assets/application.js. Esto hace que las solicitudes de /assets/application.js a ser servidos por este archivo estático que contiene todos los scripts en // requirepublic/assets/application.js compilados juntos, haciendo que se pueden cargar de nuevo.

En el modo de desarrollo <%= javascript_include_tag "application" %> ampliará a múltiples <script> etiquetas, una para cada archivo requerido por // require líneas, y también uno de application.js que sólo contiene su propio contenido.

La solución consiste en eliminar todo el directorio public/assets manualmente o utilizar la tarea de rastrillo assets:clean. Esto hará que los archivos de scripts se sirvan dinámicamente de nuevo.

+1

estoy usando Rails 3.0. 10 y se pasó a mí después de instalar la gema jquery-rails y funcionando su generador rails.js no había sido eliminado, y la eliminación de las minas que fija – PhillipKregg

+1

es cuestión de tiempo que acepté esto como una respuesta -.. esto funcionó mejor para mí. también tenga en cuenta que la ejecución de 'activos rastrillo exec de paquete: clean' trabajará para eliminar el directorio' pública/assets' la mayor parte de todo esto era porque todavía no acababa de escribir y guardar mis hojas de estilo en lo más mínimo la fricción-tha-forma. el canal de activos lo quiere. Eso es lo que obtengo por tratar de ser diferente, supongo ... –

+0

Gracias. No sabía acerca de 'assets: clean', es bueno saberlo. Costuras para hacer [más o menos lo mismo] (https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake#L83), pero las costuras más correcto. –

-1

Probablemente tiene el archivo rails.js. Quítalo e inténtalo de nuevo. Debe funcionar.

FoN

+0

que no tienen un archivo 'rails.js' cualquier lugar de mi proyecto; no en 'app/assets/javascripts', no en' public/javascripts', no en ningún lado. Tampoco hay referencias o enlaces rotos a ningún archivo 'rails.js'. –

4

Esto me estaba pasando a mí también. Eliminando "// = require_tree". desde application.js lo arregló.

+0

No trabajó para mí = ( – Tony

+0

Esto puede causar a usted como va a incluir un mismo archivo dos veces por uno manualmente ** ** javascript_include_tag y otra por application.js. En primer lugar confirme que si este es el caso de tener que incluirlo. –

0

mencionar el nombre de jQuery y jquery_ujs con la versión en application.js si todavía no entrenamiento luego tomar la versión comprimida de jQuery y jquery_ujs.

o

Añadir Gem 'jquery-rails' en su Gemfile luego probar.

+0

vez 'La gema jquery-rails' ya estaba en mi Gemfile (como se indica en la pregunta). La eliminación de' 'jquery' y jquery_ujs' eliminan por completo todas las vistas comportamiento rieles/jQuery. –

Cuestiones relacionadas