Расположение jquery.js и jquery-ujs.js и почему уничтожить ссылки не работают - PullRequest
4 голосов
/ 03 января 2012

Я немного растерялся. Во многих вопросах о stackoverflow, которые я читал, вам нужно jquery-ujs для управления вашим кодом javascript, особенно если вы хотите, чтобы эти ссылки уничтожения работали. Если я захожу на эту страницу, чтобы следовать всем инструкциям по установке, я должен сказать, что мне нечего делать.

Поскольку я использую Rails 3.1 Я должен следовать этому:

Для автоматической установки в Rails используйте гем "jquery-rails". Поместите это в свой Gemfile:
gem 'jquery-rails', '>= 1.0.12'
И запустить: $ bundle install
Этот следующий шаг зависит от вашей версии Rails.

а. Для Rails 3.1 , добавьте эти строки в начало вашего файла app / assets / javascripts / application.js:

//= require jquery
//= require jquery_ujs

Но для Rails 3.1 это уже сделано после создания нового приложения rails.

Если я запускаю $ rails generate jquery:install, я получаю следующий вывод:

deprecated  You are using Rails 3.1 with the asset pipeline enabled, so this generator is not needed.
            The necessary files are already in your asset pipeline.
            Just add `//= require jquery` and `//= require jquery_ujs` to your app/assets/javascripts/application.js
            If you upgraded your app from Rails 3.0 and still have jquery.js, rails.js, or jquery_ujs.js in your javascripts, be sure to remove them.
            If you do not want the asset pipeline enabled, you may turn it off in application.rb and re-run this generator.

Хорошо, ничего нового. Но почему мои ссылки уничтожения все еще не работают. Поэтому я задаю себе вопрос, где находятся эти файлы jquery? Когда я читаю инструкцию по установке jquery для другой версии rails, там всегда говорят мне скопировать эти файлы (jquery.js, jquery-ujs.js) в определенное место. Только как пользователь Ruby 3.1 вам не нужно делать это. Но почему? Я не могу найти эти файлы. Являются ли они частью драгоценного камня jquery-rails? Если да, почему мои ссылки уничтожения все еще не работают? Это действительно проблема JQuery? Я имею в виду, если я изменю помощника с link_to на button_to, он работает. Так как же это может произойти, если это должно быть проблемой jquery? Это может не иметь значения для меня, но я не хочу использовать кнопку формы. Кроме того, я не могу поверить, что такое приложение, как Rails, содержит такую ​​большую проблему в своих общих сгенерированных шаблонах.

Так как это исправить, не меняя хелпер link_to и не уходя от javascript ( Railscast )?

Обновление 1

  • файл макета имеет <%= javascript_include_tag "application" %>
  • config.assets.enabled = true установлено

Обновление 2

Вот источник для упомянутых ссылок уничтожения:

<%= link_to 'Destroy', @post, confirm: 'Are you sure?', method: :delete %>

Обычно он должен удалять сообщение, но вместо этого браузер указывает на местоположение этого сообщения, например, http://domain/posts/2.
Если вы запустите это с button_to вместо link_to, оно будет работать, но тогда это кнопка формы.

Обновление 3

Хорошо, ссылки уничтожения работают в Firefox, но я пользователь Google Chrome и хочу, чтобы он там тоже работал. Есть ли решение для этого?

Обновление 4

Chrome Inspector создает исключение DOMEx в строке 5122: var ret = matches.call( node, expr );

message: "SYNTAX_ERR: DOM Exception 12"

Но эта ошибка возникает на каждой гиперссылке, независимо от того, является ли она ссылкой уничтожения.
Ссылка уничтожения выдает TypeError . , но я не могу понять, идет ли он из jquery.js или из встроенного расширения chrome. jquery-ujs.js выдает ошибку и сообщение было " Вы уверены? ". Это текст, определенный рельсами для сообщения подтверждения. Поэтому я удалил опцию подтверждения, и после этого удаление сработало.

Как настроить опцию подтверждения в Chrome?

Ответы [ 4 ]

4 голосов
/ 03 января 2012

jquery.js и jquery_ujs.js динамически обслуживаются конвейером ресурсов и гемом jquery-rails. Они больше не существуют на диске в вашем приложении Rails 3.1.

Чтобы убедиться, что они обслуживаются правильно, запросите /assets/jquery.js и /assets/jquery_ujs.js в своем браузере. Убедитесь, что они возвращают JavaScript, а не ошибку 404/500.

2 голосов
/ 02 ноября 2012

Хорошо, я могу подтвердить, что «Better Pop Up Blocker» вызывает такое поведение ... поэтому я подозреваю, что все остальное с аналогичной функциональностью также вызовет ту же проблему.

С положительной стороны, с помощью вышеупомянутого плагина вы можете просто добавить белый список http://localhost, и все начнет работать как положено!

1 голос
/ 04 января 2012

Похоже на ошибку javascript ... вы можете либо:

  • опубликовать страницу на heroku, где мы можем посмотреть
  • удалить весь ваш код javascript, пока он не заработает, добавитьон возвращается до тех пор, пока не выйдет из строя

Кроме того, убедитесь, что вы не включили jquery.js и jquery-ujs.js дважды (как кажется, что вы делаете).Вы упоминали, что у вас есть теги сценариев с jquery.js и jquery-ujs.js ... не делайте этого.

Вместо этого ваше app / assets / javascripts / application.js должно выглядеть так:

//
//= require jquery
//= require jquery_ujs
//= require_tree .

Это добавит jquery, jquery_ujs и все javascripts в вашу папку app / assets / javascripts.

0 голосов
/ 25 октября 2012

Несколько недель назад я просто деактивировал все свои расширения Chrome, перезапустил Chrome и все работало нормально. Я не знаю, какие расширения Chrome я использовал во время создания этого вопроса. Единственное, что я знаю, было одно расширение, расширяющее и повреждающее код javascript. Вот почему все эти странные сообщения об ошибках просматриваются Chrome Inspector. Я не знаю, какое конкретно расширение это было на самом деле, но это должно быть одно из популярных расширений для блокировки рекламы или всплывающих окон. Просто отключите все ваши расширения Chrome и выясните, работает ли ваш код нормально.

...