刷新页面后,Ruby生成的JavaScript文件未更新

3

我正在开发一个应用程序,其中数据库中存储的项目将显示在Google地图上。为此,我将gmap.js.erb文件添加到app/assets/javascripts文件夹中。从相应的表中获取项目,并以以下方式放置在地图上:

function showItemsOnMap() {
  <% Item.all.each do |item| %>
    var lat = <%= item.lat %>;
    var lng = <%= item.lng %>;
    addMarker(lat, lng);
  <% end %>
}

这个功能运行良好,项目显示正确,但是当我添加新项目并刷新我的地图页面时,新添加的项目不会显示。在我对数据库进行更改并点击刷新后,gmap.js.erb没有被更新。我猜测仅仅通过点击浏览器中的刷新按钮来触发gmap.js.erb更新是不够的。那么我应该怎么做呢?如何使gmap.js.erb在修改了Items表时自动更新呢?


你的控制台日志/网络面板显示什么?你得到了304(未修改)响应吗?在添加项目后是否可能发生了任何错误? - Blauharley
你关掉了 Turbolinks 吗?http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4 之后重新启动。 - Kalman
@Kalman 关闭Turbolinks并没有帮助。 - Sergii Gryshkevych
@Blauharley的物品被添加、修改和删除时没有任何错误。如果我重新启动服务器,它们将正确显示在地图上。 - Sergii Gryshkevych
这是我听起来的样子。服务器生成showItemsOnMap()方法并将其发送到客户端(浏览器)。该方法在客户端上调用,但客户端从未返回服务器以请求更多... - Kalman
1个回答

3

您的gmap.js.erb文件将在首次使用此js文件的页面请求时编译为gmap.js并缓存。您可以将这些js放在视图中,使其成为动态脚本。

view.html.erb

<script>
function showItemsOnMap() {
  <% Item.all.each do |item| %>
    var lat = <%= item.lat %>;
    var lng = <%= item.lng %>;
    addMarker(lat, lng);
  <% end %>
}
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接