javascript - 如何在 Rails 应用程序上有效地限定 javascript set css 的范围?

标签 javascript jquery ruby-on-rails css scope

在我的 Rails 应用程序上确定我的 javascript 和 css 文件的范围时遇到了很多麻烦。通过范围界定,我的意思是:

如何处理仅在一个页面或一个 Controller 中使用的 java 脚本和 CSS?

我尝试了一些解决方案,但它们都很复杂且不够优雅:

  • 我看到了一些这样的建议:像这样将我的 .js 文件直接包含在我的 .erb 文件中:

    <% content_for :head do %>
      <script type="text/javascript">
    <% end %>
    

    然后在应用程序布局中生成它。但这意味着再向服务器发出一个请求以获取 .js 文件。 我认为为应用程序保留一个 .js 文件和一个 .css 文件很重要,它们由 Assets 管道

  • 创建
  • 我看到了一些其他建议,例如测试我的 HTML 标记是否出现在带有 .length 的 DOM 上jquery的方法。这仍然意味着在每个页面上测试是否存在特定标记(知道它只会出现在一个或两个页面中)。

我找到了一个易于实现的解决方案,而且在我看来非常优雅。

最佳答案

要求:

在你的应用程序中改变布局

<body>

<body class="#{controller_name}_#{action_name}">

正文的每一页都有不同的类。例如,在一个带有 article_controller 和此 Controller 上的 index 操作的博客应用程序中,正文将是:

<body class='article_index'>

CSS 作用域

CSS 作用域几乎是立竿见影的。如果你有一些只需要在特定页面上呈现的样式(比如 article#index),你只需要在你的 SCSS 文件中做广告:

body.article_index {
# CSS STYLE HERE
}

你不需要到处添加很长的类名。

Javascript 作用域

需要下载jquery-readyselector .这个插件扩展了 .ready() 来为页面特定的脚本提供一个很好的语法:

$('.article_index').ready(function () {
    alert("I'm on article#index !");
});

此插件的另一个优点是它可以与 turbolink 一起使用。

Here你可以看到我之前关于 turbolink 的问题之一。为了让我的 java 脚本在页面加载和页面更改时工作,有人向我提出了这样的建议:

// accommodate Turbolinks
$(document).on('ready page:change', function() {
// STUFF
});

但有时(在加载的第一个页面上),函数被执行了两次(一次用于ready,一次用于page:change) ,现在我只是像这样使用 jquery-readyselector :

// accommodate Turbolinks
$('nav.nav').ready(function() {
// STUFF
});

并且该函数将在每个场景中执行一次。

我希望这会对某人有所帮助。

关于javascript - 如何在 Rails 应用程序上有效地限定 javascript set css 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24719607/

相关文章:

javascript - 如何在 HTML 中搜索多个表格?

javascript - 使用 Node.js EventEmitter 而不使用子类化

javascript - 有什么方法可以使用css在子类的基础上设置父背景颜色?

javascript - 预加载图像和样式表最有效的方法是什么?

ruby-on-rails - 由随机词组成的 Heroku 应用程序 url

javascript - this.setToken 不是函数

javascript - 动态 html 内容

ruby-on-rails - 为什么 slice 需要 !上类?

ruby-on-rails - rails : Scaffold to automatically do one-to-many relationship

javascript - 在 AngularJS 中嵌入我个人资料中的 Instagram 最近照片