【问题标题】:Rails - Bootstrap and AJAX CallsRails - 引导和 AJAX 调用
【发布时间】:2015-05-03 17:48:19
【问题描述】:

所以,我有一个应用程序,它使用 RoR 4.2.0 和 Ruby 2.2.0。这是一个在线商店,有一个产品商店,带有一个“添加到购物车”按钮,我已经设置为使用远程调用将产品添加到购物车。购物车还有一个按钮,可以通过远程调用破坏当前的购物车。

这曾经在 Rails 4.1.x 上运行良好,但在我将我的应用程序升级到 4.2.0(并将所有其他 gem 更改为最新版本)后它就不行了。问题是,它在每个远程调用中发送 2 个调用,而不是 1 个(在某些时候它也发送了 3 个,我没有意识到它何时发生,因为我也修改了代码库中的其他地方),结果在单击添加到购物车按钮时添加了两个项目,并在单击销毁购物车时提示两个删除。

我试图解决这个问题,是我改变了 application.js 中条目的位置,如另一个问题中所述。这是我当前的 application.js:

//= require bootstrap
//= require jquery
//= require jquery-ui/effect-blind
//= require jquery_ujs
//= require turbolinks
//= require underscore
//= require gmaps/google
//= require analytics
//= require blueimp-gallery-all

如果我保持现在的状态,Bootstrap 导航栏菜单可以工作(为什么?bootstrap 需要 jQuery,不是吗?)但我遇到了上述问题。如果我将 Bootstrap 移到 jquery 下面,AJAX 调用会正常工作,但我没有 Bootstrap 菜单。奇怪的是,如果我删除了整个 jquery 行,一切都会正常运行。这里发生了什么? bootstrap 是否在某个时候开始包含 jQuery?还是我的资产管道以某种方式“损坏”了?我已经清除了 temp 和 assets (rake tmp:clear && rake assets:clean)。

编辑:从 javascript.js 中删除 jquery 在生产中不起作用,但在开发中起作用。我很困惑。

【问题讨论】:

  • 你给javascript_include_tag "application"打过两次电话吗?
  • 你用什么bootstrap gem?如果您使用this gem。那么你应该遵循来自here 的指南
  • 我使用'bootstrap-sass'并且javascript_include_tag被调用一次。
  • 从 javascript.js 中删除 jquery 在生产中不起作用,但在开发中起作用。我很困惑。

标签: jquery ruby-on-rails ajax twitter-bootstrap


【解决方案1】:

我也遇到了类似的问题。

原因是:

  1. 多次包含 application.js(布局 + custom_view 文件),因此单击了 3 次。
  2. 只需在 application.js 中包含 jQuery 和 jquery-us.js 并删除其他 js/jquery 版本,然后再次检查
  3. 使用"data-turbolinks-track" => true

    <%= javascript_include_tag "application", "data-turbolinks-track" => true %>        
    <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>** 
    

希望这可以解决您的问题。

【讨论】:

  • "data-turbolinks-track" =&gt; true 已启用,并且我不会在任何其他文件中包含 jquery。当我回家时,我将测试只离开jqueryjquery-ujs。我相信我的 config/environments/development.rb 中的某些内容会与我的资产混淆,或者这些库之一也包含 jquery
  • 所以,我终于想通了......显然,我有为生产预编译的资产,这妨碍了我的应用程序正常工作......我运行RAILS_ENV=production rake assets:clean,然后我更正了application.js 拥有正确的行(首先是 jquery,然后是 bootstrap),最后我运行 RAILS_ENV=production rake assets:precompile,我上传到 heroku,一切都很好......抱歉打扰大家,并且thnx 的答案,我从来没有在任何地方看到过这个(所以我认为预编译只会覆盖旧的)所以是先知的运气让我找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 2016-04-08
相关资源
最近更新 更多