【问题标题】:Coffescript getting executed on all pagesCoffeescript 在所有页面上执行
【发布时间】:2023-06-18 11:47:01
【问题描述】:

我的咖啡脚本“students.coffee”中有一个函数:

$(document).ready ->
   ...

问题在于,这是在所有页面加载时加载的。有什么办法可以限制这个函数只在特定控制器的特定操作的视图上运行?

或者有没有办法可以从特定视图显式调用此方法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 coffeescript


    【解决方案1】:

    首先,我强烈建议您阅读Asset Pipeline documentation 以更好地理解它。

    默认情况下,在application.js 中有一个指令require_tree 将加载位于application.js 文件的同一文件夹和子文件夹中的所有js 文件。

    这意味着,所有由 Rails 生成器自动创建的控制器的 JS 都将被添加到压缩的 application.js 文件中,然后在每个页面上执行,因为 application.js 声明在布局的顶部(@987654328 @)。

    如果您想要特定控制器的资产,请查看 Asse Pipeline 文档的this part

    【讨论】:

    • 谢谢,我摆脱了“require_tree”,并在我的视图中添加了 但咖啡脚本现在不执行
    • 仔细阅读我发给你的链接。如果您注意您的请求params[:students] 不存在。你真的应该输入params[:controller]。在每个 Rails 请求中,rails 都会为其提供一个控制器参数,以便您知道当前控制器是什么。在您的情况下,此控制器将是 students,因此 Rails 将用 students 替换 params[:controller],并且 html 将包含正确的 javascript。再次我强烈建议您阅读文档
    【解决方案2】:

    首先将 students 从您的 application.js 清单文件中删除。我假设你没有//= require_tree .。否则会加载所有内容。

    在您要加载此文件的特定视图中,您可以这样写

    <%= javascript_include_tag 'students', 'data-turbolinks-track' => true %>
    

    【讨论】:

    • 我的“application.js”文件没有学生,但有“//= require_tree”