16

Okay, więc widziałem, że this question o tym problemie jest spowodowane wieloma linkami jQuery lub Prototype, ale mogę potwierdzić, że jestem tylko link do jQuery raz na całej stronie. Mój problem jest następujący: kiedy mam link_to, który potwierdza usunięcie, popup pokazuje dwa razy. Tutaj jest zastosowanie kodu w moim szablonu (napisany w Slim):Rails 3.1 z potokiem aktywów, link_to: potwierdzić wiadomość pokazującą dwa razy?

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

biegnę Rails 3.1.0 z Asset Pipeline włączone, z gem 'jquery-rails' w moim Gemfile, i po to w moim application.js plik (który jest kompilowany przez Sprockets dla potoku aktywów).

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

mam underscore.js i backbone.js w moim katalogu /vendor/assets/javascripts/ i zębatkami wydaje się znaleźć te, w porządku. Przeszukałem również plik application.js, który wyświetla serwery, a jQuery jest tam tylko raz, a jQuery UJS jest tam tylko raz. Tak wygląda moja głowa, gdy wyświetla się moja strona (pominąłem wartość csrf-token dla wyświetlacza, 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 ma jakiś kod specyficzny dla kręgosłupa; nic, co mogłoby ponownie włączyć jQuery. Więc jaka jest umowa? Nie mam dodatkowego pliku jQuery w dowolnym miejscu mojego projektu; wszystko to jest zarządzane za pomocą klejnotu jquery-rails. Co powoduje, że moja metoda wywołuje dwa razy?

EDIT: Wcześniej widziałem to na RC5 Rails 3.1, ale teraz widzę to również na Rails 3.1 rzeczywiste.

Odpowiedz

25

Stało się tak, ponieważ uruchomiłem rake assets:precompile w moim środowisku programistycznym, powodując utworzenie public/assets/application.js. To powoduje, że żądania dla /assets/application.js będą obsługiwane przez ten plik statyczny, który zawiera wszystkie skrypty // require w zestawie public/assets/application.js, co spowoduje ich ponowne załadowanie.

W trybie rozwoju <%= javascript_include_tag "application" %> rozszerzy się na wiele <script> znaczniki, po jednym dla każdego pliku wymaganego przez // require linii, a także jeden dla application.js które zawierają tylko własne treści.

Rozwiązanie polega na ręcznym usunięciu całego katalogu public/assets lub skorzystaniu z zadania rake z assets:clean. Spowoduje to ponowne dynamiczne wyświetlanie plików skryptów.

+1

Używam Rails 3.0. 10 i przydarzyło mi się to po zainstalowaniu klejnotu jquery-rails i uruchomieniu jego generatora, Rails.js nie został usunięty i usunięciu tej stałej koperty – PhillipKregg

+1

Najwyższy czas, abym przyjął to jako odpowiedź - to działało najlepiej dla mnie. Zauważ też, że uruchomienie 'bundle exec rake assets: clean' będzie działało dla usunięcia katalogu' public/assets' Większość z tego wszystkiego była, ponieważ wciąż nie zapisywałem i nie zapisywałem swoich arkuszy stylów w najmniejszy sposób t Potencjalny rurociąg chce, abyś to zrobił. To właśnie dostaję za próbę bycia innym, tak myślę ... –

+0

Dzięki. Nie wiedziałem o "zasobach: czyste", dobrze wiedzieć. Szwy zrobić [mniej więcej to samo] (https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake#L83), ale szwy bardziej poprawne. –

-1

Prawdopodobnie masz plik rails.js. Usuń i spróbuj ponownie. To musi działać.

FoN

+0

Nie mam pliku 'rails.js' w dowolnym miejscu mojego projektu; nie w 'app/assets/javascripts', nie w' public/javascripts', ani nigdzie. Nie ma również odnośników ani uszkodzonych linków do jakiegokolwiek pliku 'rails.js'. –

4

To też mnie spotkało. Usuwanie "// = require_tree." z pliku app.js naprawiono.

+0

To nie zadziałało dla mnie = ( – Tony

+0

Może to spowodować, że dołączasz do tego samego pliku dwa razy jedno ręcznie ** javascript_include_tag ** i inne przez application.js. Najpierw potwierdź, że w takim przypadku musisz włącz to raz. –

0

Wymień nazwę jquery i jquery_ujs z wersją w pliku application.js, jeśli nadal nie jest to program ćwiczeń, następnie spakuj wersję jquery i jquery_ujs.

lub

Dodaj gem 'jQuery szyny' do swojego gemfile następnie wypróbować.

+0

Klej 'jquery-rails' był już w moim Gemfile (jak podano w moim pytaniu) .Odinstalowywanie' jquery' & 'jquery_ujs' całkowicie usunęło zachowanie widoku Rails/jQuery .. –