繁体   English   中英

无法在Rails(5+)中加载控制器特定的javascript文件

[英]Unable to load controller-specific javascript file in Rails (5+)

我已经尝试了尽可能多的潜在解决方案,到目前为止,没有任何效果。 .js文件中的代码未执行,也未显示在客户端浏览器中的任何位置。

application.html.erb将此部分加载到头部:

<%= csrf_meta_tags %>
<%= stylesheet_link_tag "application", params[:controller], media: "all" %>
<%= javascript_include_tag "application", params[:controller] %>

配置/初始化/ assets.rb

%w(  articles password_resets sessions static_pages users ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"]
end

[控制器名称这里]的.js

$(document).ready(function() {
    alert('My controller');
});

在浏览器中,当以上所有操作保持不变时,将存在一个名为“ [controller-name] .self.longstringhere.js?body = 1”的资产。 它将包含以下代码:

(function() {


}).call(this);

…在我的项目中不存在。 如果我从assets.rb中删除该控制器,则当尝试从该控制器加载页面时,它会引发错误(按预期)。 当摆脱应用程序布局中的条目时,浏览器的资产中缺少[[controller] .self.js]文件[正如预期的那样]。 但是,是否缺少控制器的js文件不会导致任何错误,也不会阻止浏览器的资产包含'[controller] .self.js'。 就像app / assets / javascripts中的文件被完全忽略并“存根”。

注意:我专门没有'// = require_tree'。 和'* = require_tree'。 在application.js / .css文件中,因为我特别按照此处的说明进行操作。 这是故意的。

我还删除了所有可以找到的turbolinks参考(宝石,资产等),因为我一直在阅读,这可能导致发生与该问题有关的邪恶事件。

我还重新启动了服务器,对资产进行了预编译,并多次执行了此操作以及其他一些仪式性的操作-均无济于事。

作为记录,我也将assets.rb中的“#{controller} .js.coffee”更改为仅.js,但无济于事。 但是我读到,这根本没有必要。

这个问题与所有控制器有关,而不仅仅是一个控制器。

谢谢你的帮助!

[编辑]我使用脚手架创建了一个新的Rails项目,并遵循相同的步骤(但要确保预先编译的资产(posts.js)在asset.rb中是按名称专门调用的),并且存在与上述相同的问题,包括相同的问题。浏览器的posts.blahblah.js文件中的javascript“ stub”代码。

似乎您的文件名为[controller-name-here].js而您使用的是js,而不是coffee。

但是,您要在config/initializers/assets.rb文件中添加coffee文件。 这就是为什么它不能正确编译文件的原因。 尝试更改您的config/initializers/assets.rb文件,如下所示:

%w(  articles password_resets sessions static_pages users ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end

其他一切似乎都很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM