将JS文件隔离为Rails中特定于视图的文件

时间:2016-05-28 19:13:51

标签: javascript ruby-on-rails ruby asset-pipeline

在我的Rails应用程序中,我有一些我希望始终可用的JS文件,并将它们放在app/assets/javascripts/globals中,并通过application.js//= require_tree ./globals进行编译。

但是,我有一些视图特定的JS文件,如果它们仅针对某些视图或控制器实现,则更愿意。它们目前通过config/initializers/assets.rb汇编在Rails.application.config.assets.precompile += %w( foo.js bar.js ),并通过相应视图中的<%= javascript_include_tag "foo/bar", "data-turbolinks-track" => true %>进行访问。

我已经在foo.js&amp;中包含了基本功能。在bar.js等条件中if $("#foo").length > 1 ...,如果不存在所需的div,则会阻止其功能。

因此,在访问视图之前,JS文件不是“活动的”。但是,在访问之后,即使在访问另一个视图之后,JS代码也是“活动的”。是否有一种控制机制可以确保只为相关视图读取JS代码?

1 个答案:

答案 0 :(得分:0)

http://brandonhilkert.com/blog/page-specific-javascript-in-rails/ http://brandonhilkert.com/blog/organizing-javascript-in-rails-application-with-turbolinks/

这就是我实现特定视图的方式,尽管这真的很痛苦。

基本上,您将构建一个脚本命名空间,其中包含始终触发或仅在特定控制器甚至操作上触发的脚本。

Rails还提供了一种特定于控制器的方法。 http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets

我老实说试试这个,因为它非常简单。我也在假设,看看你可以轻松采取行动的实施。

至于你是“主动”代码问题。

1)确保您正在使用文档就绪(和/或页面:根据版本加载turbolinks)。

2)确保您的脚本开始工作。

3)确保他们正在进行页面刷新和turbolink访问。

取决于它如何以及何时中断,这可能意味着不同的问题。