我正在阅读资产管道的rails指南文档。它指出,如果清单上有require_tree指令,则默认情况下,特定于coffeescript页面的生成文件已准备好供用户使用。这对我不起作用,我必须包括这个
<%= javascript_include_tag params[:controller] %>在特定的控制器上。我错过了什么?
发布于 2014-11-02 23:15:08
资产管道将把所有的JS压缩到一个单独的文件application.js中。为了调用特定页面的JS,您需要通过控制器和操作来组织JS。有一个gem,RailsScript可以自动完成这项工作,它与Turbolinks兼容,可以给你一种单页面应用程序的感觉。
https://github.com/gemgento/rails_script,RailsScript只需要几分钟就能学会。
使用rails脚本的特定示例:
# app/assets/javascripts/users.js.coffee
window.App ||= {}
class App.Users extends App.Base
show: ->
alert('The users#show action!')发布于 2013-09-25 04:05:05
我认为你在总体上误解了资产管道。它不会单独加载javascript文件,而是将所有的.js.coffee文件编译成一个大的js文件,您必须将其包含在视图/布局中,如下所示
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>如果你想要一些只在一个视图中可用的js-code,你绝对不应该把它包含在资产管道中。
发布于 2013-09-25 05:04:20
不知道我是否误解了您的第一段,但我认为这一行的意思是,如果您的application.js清单包含如下一行:
//= require_tree .那么确实是的,页面特定的javascript或coffeescript将被加载,不仅针对该特定页面,还针对所有页面。如果您想要将资源约束到您所描述的特定页面,那么您将需要一个位于app/assets/javascripts/中的文件,其中包含控制器和.js的复数名称。
我会亲自创建它作为该特定页面的另一个清单,这样我就可以加载多个资产。假设您有一个名为UsersController的控制器,该控制器的视图使用各种资源。然后,您需要的是app/assets/javascript目录中的.js文件users.js或users.js.coffee,才能使您在问题中编写的行正常工作。
或者,为了保持命名约定,我可以这样做:
<%= javascript_include_tag "application-#{params[:controller]}"%>当然,将我的文件命名为合适的名称(application-users.js)。
此外,当您这样做时,您将希望停止为所有控制器加载特定于页面的资产。只需根据需要删除//= require_tree .行并将其替换为显式的//= require行。
https://stackoverflow.com/questions/18990885
复制相似问题