我有点困惑。在stackoverflow的很多问题中,我读到你需要jquery-ujs来管理你的javascript代码,特别是如果你想要这些破坏链接确实有效。如果我继续阅读所有安装说明,我必须说我无所事事。
因为我正在使用 Rails 3.1 ,所以我必须遵循:
要在Rails中自动安装,请使用“jquery-rails”gem。将其放在您的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文件位于何处?当我读取另一个rails版本的jquery安装指令时,他们总是告诉我将这些文件(jquery.js,jquery-ujs.js)复制到特定位置。仅作为Ruby 3.1用户,您不必执行此操作。但为什么?我找不到这些文件。它们是jquery-rails gem的一部分吗?如果是,为什么我的销毁链接仍然不起作用?这真的是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
而不是var ret = matches.call( node, expr );
运行此功能,则可以使用它,但随后是表单按钮。
更新3
好的,破坏链接可以在Firefox中运行,但我是谷歌Chrome用户,我也想让它在那里工作。有解决方案吗?
更新4
Chrome Inspector在第5122行抛出DOMException:message: "SYNTAX_ERR: DOM Exception 12"
{{1}}
但是每个超链接都会发生此错误,无论它是否为销毁链接
destroy链接抛出 TypeError 。,但我无法弄清楚它是来自jquery.js还是来自内置的chrome扩展。 jquery-ujs.js throws错误和消息是“你确定吗?”。这是rails为确认消息定义的文本。所以我删除了确认选项,然后删除工作。
如何在Chrome中使用确认选项?
答案 0 :(得分:4)
jquery.js和jquery_ujs.js由资产管道和jquery-rails gem动态提供。它们不再存在于Rails 3.1应用程序的磁盘上。
您可以通过浏览器请求/assets/jquery.js
和/assets/jquery_ujs.js
来验证是否正确投放了这些内容。确保他们返回JavaScript而不是404/500错误。
答案 1 :(得分:2)
好吧,我可以确认“更好的弹出窗口阻止程序”会导致这种行为..所以我怀疑其他具有类似功能的东西也会导致同样的问题。
从好的方面来说,使用上面的插件,你可以将http://localhost
列入白名单,一切都按预期开始工作!
答案 2 :(得分:1)
看起来像是一个javascript错误......你可以:
另外,请确保您没有两次包含jquery.js和jquery-ujs.js(就像您正在做的那样)。你曾经提到你有jquery.js和jquery-ujs.js的脚本标签......不要这样做。
相反,您的app / assets / javascripts / application.js应如下所示:
//
//= require jquery
//= require jquery_ujs
//= require_tree .
这将在app / assets / javascripts文件夹中添加jquery,jquery_ujs和所有javascripts。
答案 3 :(得分:0)
几周前,我刚停用了所有Chrome扩展程序,重新启动了Chrome,一切正常。我不知道在创建此问题时我使用的是哪些Chrome扩展程序。我唯一知道的是,有一个扩展程序扩展并破坏了javascript代码。这就是Chrome Inspector查看所有这些奇怪错误消息的原因。我不知道它确实是哪个特定的扩展,但它必须是流行的广告拦截或弹出窗口阻止扩展之一。只需停用所有Chrome扩展程序,并确定您的代码是否正常运行。