我有一个当前正在运行的简单应用程序,但我正在尝试将其转换为使用 ajax 以改善用户体验,以便每次用户单击导航中的链接时都不需要重新加载整个页面。它使用简单的页眉/正文/页脚方法,导航栏包含在页眉内。
所以目前,当我点击我的任何导航项目时,它会正确更改活动状态 CSS 突出显示,这是我使用 Coffeescript 完成的。
正如您将在下面的代码中看到的,我在导航中的第 4 个链接链接到“new_movie_path”。此页面使用 Nokogiri 抓取网站(例如 IMDB.com)并显示当前票房排名前 10 的电影,因此它可能需要一些时间才能完成,并且不会立即加载。这个模块单独工作得很好。
我想要做的是,当我单击该链接时,它不会刷新页面,而是使用 ajax 调用获取数据并在我当前布局的正文中显示结果。我已将remote: true元素添加到链接中,但经过多次试验和错误未能弄清楚其余部分。奖励:加载数据时会出现一个微调器。
我现有代码的片段:
/app/views/layout/application.erb.html
<body>
<%= render 'shared/header' %>
<div class="container first-contain" id="body-content">
<%= yield %>
</div>
</body>
/app/views/shared/_header.html.erb
<ul class="nav">
<li class="active"><%= link_to "Home", "#" %></li>
<li><%= link_to "About", "#" %></li>
<li><%= link_to "Contact", "#" %></li>
<li><%= link_to "New Movies", new_movie_path, remote: true %></li>
</ul>
/app/assets/javascripts/navigation.js.coffee
$ ->
changeTab = (e) ->
e.preventDefault()
$("ul.nav li.active").removeClass "active"
$(@).addClass("active")
$("ul.nav li").click changeTab
非常感谢您对此事的任何帮助。