在我的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代码?
答案 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访问。
取决于它如何以及何时中断,这可能意味着不同的问题。