【问题标题】:Add Javascript to Application Layout View Page将 Javascript 添加到应用程序布局视图页面
【发布时间】:2012-11-25 05:16:39
【问题描述】:

我需要突出显示与当前页面相关的链接按钮。

apps/views/layouts/application.html.erb:

<ul class="nav nav-tabs">
    <li class="link_style"><a href="/">link1</a></li>
    <li class="link_style"><a href="/about">link2</a></li>
    <li class="link_style"><a href="/posts">link3</a></li>
</ul>

我打算将以下内容添加到一些 .js 文件中

$('li.link_style').on('click', function(){
    $(this).addClass('active'); // and then add active class for clicked element.
});​

我认为这会很好。但是,我不确定应该在哪个 .js 文件中添加 js 代码。我的猜测是/app/views/layouts/application.js.erb 我的方法对吗?

【问题讨论】:

  • Ruby on Rails 的哪个版本?

标签: javascript ruby-on-rails layout view


【解决方案1】:

如果您为 Rails 3.1 或更高版本的应用程序使用默认设置,则可以将其放置在 app/assets/javascripts 内的任何 .js 文件中。请务必查看Rails Asset Pipeline Guide中的section on asset organization

【讨论】:

  • 你能补充一点吗?在 /app/views/posts 中,我有与 PostsController 中的“喜欢”操作相关的 like.js.erb。所以我想我必须把它放在 /app/views/layout 目录中才能正确关联。如果我把它放在 app/assets/javascripts 中,我是否必须从 application.js 中要求它?
【解决方案2】:

使用

$('li.link_style').on('click', function(){
   $(this).addClass('active'); // and then add active class for clicked element.
});​

将不起作用,因为单击链接时将重新加载页面(和 JS)。更有用的东西可能是这样的:

$(document).ready(function() {
  $(".nav li.link_style").each(function(){
    var link = $(this).find($(a));
    if(window.location.pathname == link.attr("href")){
      link.addClass("active");
    }
  });
});

这将遍历 nav 类中的所有 li 元素,并将当前页面的路径与链接的 href 进行比较,如果它们匹配,则添加 active 类。您应该在 JS 文件的 $(document).ready(function() {} 部分中添加类似的内容。至于将其添加到哪个 JS 文件中,它可以是 Asset Pipeline (Rails 3.1) 中包含的任何内容+) 或您所说的 application.js。

【讨论】:

  • 那么js文件的名字无所谓?
  • 你必须这样做 //= 在 application.js 中需要 some_name.js 吗?
  • 名称无关紧要,只要它包含在你正在使用的asset_pipline 中(看起来就是这样)。因此,通过添加行 //= require my_link_highlighter,需要在 application.js 文件中添加包含上面突出显示的链接的文件 app/assets/javascripts/my_link_highlighter.js
  • 这种情况下js应该如何被调用?
  • 我更新了 JS 以提供它的加载方式,在这种情况下,它位于 $(document).ready 上,因此它将在 DOM 完全加载时运行。 api.jquery.com/ready
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多