gpt4 book ai didi

ruby-on-rails - Assets 管道: use javascript files for only one controller

转载 作者:行者123 更新时间:2023-12-02 21:44:00 24 4
gpt4 key购买 nike

在 Ruby on Rails v4 中,我希望仅为特定 Controller 加载一个 js 文件(或一组 js 文件)。

执行此操作的标准方法是什么?

在 application.js 中有 //= require tree . 行。我假设这需要删除,所以我并不总是加载每个文件。但然后呢?使用 Mycontroller 时是否会始终加载名为 mycontroller.js 的文件?

最佳答案

如果使用得当, Assets 管道会非常强大:

list

//= require tree . 的目的是创建一个“ list ”文件,Rails 将使用该文件来呈现您调用的文件。如果您不“预编译”您的 Assets ,这意味着每次您的浏览器加载您的应用程序时,它都会查找 list 中包含的文件并加载它们

这意味着您可以定义在 list 中调用的内容和不调用的内容。我们更喜欢在 list 中调用任何基于 gem 的 Assets ,但也指定特定的文件夹,如下所示:

//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.draggable
//= require_tree ./jquery
//= require_tree ./extra
//= require turbolinks

我们使用此设置来调用所有 JQuery 插件和任何额外的 JS,以及特定于 gem 的文件


预编译

如果您预编译 Assets ,它基本上会构建不同的文件,这些文件在您加载浏览器时一致加载。如果您使用 Heroku 或 CDN,您可能希望预编译您的 Assets ,以减少延迟和依赖性


应用程序设计

为了回答你的问题,你当然可以加载特定于 Controller 的JS。我们这样做:

#app/views/layouts/application.html.erb
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag controller_name, media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag controller_name, "data-turbolinks-track" => true %>

然后,您可以使用 Phoet 所描述的内容来确保您的 JS 文件被分割:

#config/environments/production.rb
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w(mycontroller.js)

然后对于application.js,你只能调用你想要在整个应用程序中持久保存的文件:

#app/assets/javascripts/application.js
//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.draggable
//= require_tree ./jquery
//= require_tree ./extra
//= require turbolinks

关于ruby-on-rails - Assets 管道: use javascript files for only one controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com