gpt4 book ai didi

asset-pipeline - 仅在 Rails 3.2 + Sprockets + LESS 中使用相关 Assets

转载 作者:行者123 更新时间:2023-12-04 05:59:42 25 4
gpt4 key购买 nike

我对 Rails 有点陌生,到目前为止还不错。 Assets 管道/sprockets 非常整洁,但我有点困惑。在为我的各种 Controller 生成脚手架时,单独的 css/SCSS 文件被放入 app/assets/stylesheets。但是对于我的项目,我使用的是 LESS 而不是 SCSS,所以我用 .css.less 文件替换了它们。

我遇到的问题是,如果我将 CSS 添加到 Controller (例如,我们称其为“home.css.less”),它会包含在每个 View 中,而不仅仅是属于“home” Controller 的 View 。如果我删除 "*= require_tree 。"来自 application.css 文件,则该文件不包含在任何 View 中。

如何使用 Rails Assets 管道为特定 Controller / View 指定 CSS 代码?

应用程序.css:

/*
*= require twitter/bootstrap
*= require_self
*= require "application_custom"
*/

主页.css.less:
body {
background: asset-url("circles.png") no-repeat;
}

以上结果没有应用背景,即使是家庭 Controller 的 View 。

最佳答案

这是一个相当普遍的要求;许多网站都有主页特定的 CSS,他们不想在整个网站上应用这些 CSS。

如果可以的话,在提供解决方案之前,我将对此发表一些评论。

管道向客户端呈现一个 CSS(和一个 JS)文件的目的。添加摘要以允许添加服务器 header ,强制远程客户端在其本地缓存中保留它们的副本。

出于性能原因,单一请求和主动缓存策略是 Rails 的默认策略;每个请求都会减慢页面速度。

除非主页 CSS 非常广泛,否则我建议使用默认行为。如果希望将其拆分是由于主页和其他页面之间 CSS 选择器的冲突,我建议更改 CSS 结构来解决这个问题。

至少有两种常见的解决方案:

如果您想为每个 Controller 手动创建不同的文件,将使用第一个。

<%= stylesheet_link_tag "application", controller_name %>

为此,您必须告诉 rails 预编译所有单独的 CSS 文件(在 application.rb 中):
config.assets.precompile << '*.css'

第二个是添加一个助手来仅在 View 需要时呈现 CSS。

我推荐 this question 上的顶级解决方案.您将不得不修改 CSS 的助手名称。只有当它在 View 中设置时,才会为所需的 CSS 呈现一个标签。

关于asset-pipeline - 仅在 Rails 3.2 + Sprockets + LESS 中使用相关 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074745/

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