16

Ok, quindi ho visto this question su questo problema causato da più collegamenti di jQuery o Prototype, ma posso confermare che sto collegando solo a jQuery una volta sull'intera pagina. Il mio problema è questo: quando ho un link_to che conferma una delezione, il popup mostra due volte. Ecco il codice applicabile nel mio modello (scritto in Slim):Rails 3.1 con Pipeline Asset, link_to: conferma il messaggio visualizzato due volte?

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

Io corro Rails 3.1.0 con l'Asset Pipeline acceso, con gem 'jquery-rails' nel mio Gemfile, e la seguente è nel mio application.js file (che è compilato da Sprockets per la pipeline di asset).

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

devo underscore.js e backbone.js nella mia directory /vendor/assets/javascripts/ e pignoni sembra trovare quelli a posto. Ho cercato anche attraverso il file application.js che pignoni serve, e jQuery è solo in una volta, e jQuery UJS è solo in una volta. Questo è quello che la mia testa sembra quando la mia pagina esegue il rendering (ho omesso il valore csrf-token per la visualizzazione, 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 ha qualche codice specifico backbone in esso; nulla che avrebbe scelto di includere nuovamente jQuery. Allora, qual è l'affare? Non ho un file jQuery aggiuntivo da nessuna parte nel mio progetto; è tutto gestito tramite la gemma jquery-rails. Cosa sta causando il mio metodo :confirm per sparare due volte?

EDIT: In precedenza stavo vedendo questo su RC5 di Rails 3.1, ma ora lo vedo anche su Rails 3.1 attuale.

risposta

25

Questo è successo a me perché avevo eseguito rake assets:precompile nel mio ambiente di sviluppo che causa public/assets/application.js da creare. Questo rende le richieste di /assets/application.js per essere servito da questo file statico che contiene tutti gli script in // requirepublic/assets/application.js compilati insieme, causando loro di essere caricati ancora una volta.

In modalità di sviluppo <%= javascript_include_tag "application" %> si espanderà in multipli <script> tag, uno per ogni file richiesto dal // require linee, e anche uno per application.js che contengono solo il proprio contenuto.

La soluzione è rimuovere l'intera directory public/assets manualmente o utilizzare l'attività rake assets:clean. Ciò farà sì che i file di script vengano nuovamente pubblicati dinamicamente.

+1

Sto usando Rails 3.0. 10 ed è successo a me dopo aver installato la gemma jquery-rails ed eseguito il suo generatore.Rails.js non era stato rimosso e rimuovendo la mia miniera fissa – PhillipKregg

+1

È giunto il momento che io abbia accettato questa risposta - questo ha funzionato meglio per me. Si noti inoltre che l'esecuzione di 'bundle exec rake assets: clean' funzionerà per la rimozione della directory' public/assets'. La maggior parte di tutto è stato perché non ho ancora scritto e archiviato i miei fogli di stile nel modo meno attrito l'Asset Pipeline ti vuole. Questo è quello che ottengo per cercare di essere diverso, immagino ... –

+0

Grazie. Non sapevo di "beni: puliti", buono a sapersi. Cuciture da fare [più o meno la stessa cosa] (https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake#L83) ma le cuciture sono più corrette. –

-1

Probabilmente avete il file rails.js. Rimuovilo e riprova. Deve funzionare.

FoN

+0

Non ho un file 'rails.js' in nessun punto del mio progetto; non in 'app/assets/javascripts', non in' public/javascripts', non ovunque. Non ci sono riferimenti o collegamenti interrotti a qualsiasi file 'rails.js'. –

4

Questo stava accadendo anche a me. Rimozione di "// = require_tree." da application.js risolto.

+0

Non ha funzionato per me = ( – Tony

+0

Questo potrebbe causarti mentre stai includendo uno stesso file due volte uno manualmente ** javascript_include_tag ** e altro da application.js. Prima conferma che se questo è il caso devi includilo una volta. –

0

menzionare il nome di jQuery e jquery_ujs con la versione in application.js se ancora non allenamento poi prendere versione compressa di jQuery e jquery_ujs.

o

Aggiungi Gem 'jquery-rails' nella vostra Gemfile poi provare.

+0

La gemma 'jquery-rails 'era già nel mio Gemfile (come indicato nella mia domanda). Rimuovere' jquery' e 'jquery_ujs' completamente rimosso tutto il comportamento di Rails/jQuery. –