Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript添加到应用程序布局视图页面_Javascript_Ruby On Rails_Layout_View - Fatal编程技术网

将Javascript添加到应用程序布局视图页面

将Javascript添加到应用程序布局视图页面,javascript,ruby-on-rails,layout,view,Javascript,Ruby On Rails,Layout,View,我需要突出显示与当前页面相关的链接按钮 在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></l

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

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代码添加到哪个.js文件中。我的猜测是
/app/views/layouts/application.js.erb

我的方法正确吗?

如果您使用Rails 3.1或更高版本应用程序的默认设置,您可以将其放置在
app/assets/javascripts
中的任何
.js
文件中。请务必在

的使用中查看

$('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进行比较,然后在匹配的情况下添加活动类。您应该在JS文件的$(document).ready(function(){}部分中放入类似的内容。至于添加到哪个JS文件,它可以是资产管道(Rails 3.1+)中包含的任何JS文件或者你的application.js,正如你所说。

哪个版本的Ruby on Rails?你能给它添加一点吗?在/app/views/posts中,我有like.js.erb,它与PostsController中的“like”操作相关。所以我想我必须将它放在/app/views/layout目录中才能正确关联。如果我把它放在app/assets/javascripts中,我是否需要从m application.js?那么js文件的名称无关紧要?您是否必须在application.js中执行//=要求一些_name.js?如果您正在使用该文件,则只要它包含在资产管道中,名称就无关紧要(看起来是这样的)。因此,application.js文件中需要包含上面突出显示的链接的app/assets/javascripts/my_link_highlighter.js文件,方法是添加行//=require my_link_highlighter在这种情况下如何调用js?我更新了js以提供如何加载它,在这种情况下,它位于$(文档)上.ready,以便在DOM完全加载时运行。
$(document).ready(function() {
  $(".nav li.link_style").each(function(){
    var link = $(this).find($(a));
    if(window.location.pathname == link.attr("href")){
      link.addClass("active");
    }
  });
});