Rails 4头痛,在特定页面中加载/预加载JavaScript游戏

时间:2014-03-24 22:19:23

标签: javascript jquery ruby-on-rails

我在Rails服务器上托管依赖HTML / CSS / JS的游戏。这些游戏以他们自己的特定视图显示。

vardarac.us

虽然资产管道加载了所有游戏代码,无论您在服务器中访问的位置(我都很好),游戏只应显示在特定视图中的特定div中。只有在访问包含此div的页面时,才会预先加载从我的CDN传送的声音和图像等资源。

<div id="game-goes-here"></div>

我当前的实现使用每个游戏的预加载脚本。每个都包含一个附加到$(document).on("page:change", somePreloadingFunction)的事件监听器以及一个window.page变量,以尝试确保游戏代码仅在该特定div位于页面上时才与用户交互。该计划是这样的。

在包含游戏的视图中:

<%= javascript_tag do %>
  window.page = "<%= @game && @game.name %>"
<% end %>

预加载/ UI设置脚本:

var ready = function() {
  if(window.page == "specific_game_name") {
    game.gameContainer = $("#game-goes-here"); // Attach UI to this div
    //Load game assets, once loaded begin game display
  }
};
$(document).on("page:change", ready);

第一次单击链接进入我的某个游戏时,此功能正常。但是,如果我然后使用后退按钮再试一次,我会得到一个空白页面,或者预加载器进入永无止境的循环并且不显示游戏。通过直接访问网址或刷新我网站上的任何位置并再次尝试来解决问题。

老实说,我不知道这里可能出现什么问题。这是Turbolinks或浏览器缓存的问题,还是我不知道的事情?

1 个答案:

答案 0 :(得分:0)

我建议您首先尝试禁用turbolinks(将&#34; data-no-turbolinks&#34;添加到BODY标记中)并查看它是否有效。如果是这样的话,你现在确定它真的是一个破坏事物的涡轮链接。你的第一个选择是这样离开:)如果,另一方面,你想要你的turbolinks,我依稀记得我必须实现jQuery的标准文件准备好&#34;处理程序&#34;和turbolinks&#39; page:加载以使一切正常(几个月前,当我遇到类似的问题时),因为有时前者会被调用,有时候会被调用。

很抱歉因为无法更具体,但我现在无法找到该代码。无论如何,祝你好运!