如何在Ruby on Rails中使用Javascript?

我想我从根本上误解了如何在我的rails应用程序中实现Javascript。 我的理解是你把你的Javascript扔到你的application.js文件中,然后你可以使用jQuery引用你的DOM中的元素,以便创建一个交互式网页。

我刚检查了所有代码,它看起来很干净(如果我错了,发布在下面)。 我的想法是,我可能会把我的Javascript放在错误的地方,或者我在某个地方错过了依赖? 我发现其他post对我来说几乎无益。 如何将Javascript合并到我的应用程序中?

的application.js

 function main() { $('.answers-box').hide(); $('.qaa-box').on('click', function() { $(this).next().slideToggle(400); }); } $(document).ready(main()); 

page.html.erb

 

Lorem ipsum dolor sit amet, consectetur adipiscing elit

Lorem ipsum dolor sit amet, consectetur adipiscing elit

你找到了吗?
在哪里坚持你的JavaScript 。

在哪里坚持你的JavaScript

无论您是使用Rails资产管道还是直接向视图添加标记,您都必须选择放置任何本地JavaScript文件的位置。

我们为本地JavaScript文件选择了三个位置:

  • app/assets/javascripts文件夹
  • lib/assets/javascripts文件夹
  • vendor/assets/javascripts文件夹

以下是为脚本选择位置的准则

  • 使用app/assets/javascripts为您的应用程序创建JavaScript。
  • lib/assets/javascripts用于许多应用程序共享的脚本(但如果可以,请使用gem)
  • 使用vendor/assets/javascripts来获取其他开发人员的jQuery插件等的副本。

最简单的情况下,当所有JavaScript文件都在app/assets/javascripts文件夹中时,您无需做任何其他事情。

在其他任何地方添加JavaScript文件,您将需要了解如何修改清单文件。

神秘的清单
JavaScript资源文件夹中有两种文件:

  • 普通的JavaScript文件
  • 清单文件
    您还可以拥有CoffeeScript文件和ERB文件,这些文件是普通 JavaScript文件的变体。

清单文件与普通JavaScript文件具有相同的.js文件扩展名。 清单文件和普通JavaScript文件可以组合在一个文件中。 这使得清单文件变得神秘 ,或者至少是非显而易见的。

默认的app / assets / javascripts / application.js文件是一个manifest file 。 它是一个清单文件,因为它包含指令:

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

指令告诉Sprockets应该组合哪些文件来构建单个JavaScript脚本。 包含清单指令的每个文件都将成为一个与原始清单文件同名的JavaScript脚本。 因此app/assets/javascripts/application.js清单文件成为 application.js脚本。

当清单文件包含默认的// = require_tree时, app/assets/javascripts文件夹中的所有脚本都会自动添加到默认的application.js脚本中 指示。

希望这可以帮助。

如果您正在使用Rails 5,则可能需要通过添加将jQuery添加到项目中

gem 'jquery-rails'

在你的Gemfile中,以及添加

//= jquery

到你的app > assets > javascript > application.js文件。

由于Rails 5使用Turbolinks,您可能还需要更改监听器

$(document).ready$(document).on('turbolinks:load', function(main());

console.log添加到main函数将有助于调试以查看事件是否被触发。

您忘记在document.ready中的函数main()之后添加括号

 $(document).ready(main();) 

除此之外,请尝试以下方法:

jquery-rails gem添加到Gemfile中(将其放在gem文件中):

 gem 'jquery-rails' 

然后运行bundle install

然后在application.js编写以下内容:

 //= require jquery //= require jquery_ujs 

$(document).ready()需要一个函数,而不是函数调用的结果。 相反,您 DOMReady事件之前调用main() ,并将undefined传递给$(document).ready()函数。

它应该是这样的:

 $(document).ready(main);