Pjax并在特定页面上重新加载JavaScript

时间:2016-03-22 22:06:00

标签: javascript ruby-on-rails pjax

我想在我的Rails应用中实现Pjax和Google Map,并且我在重新加载JavaScript代码时遇到了问题。

我的layout / application.html.erb是这样的:

<body>
  <%= render 'shared/navbar' %>
  <%= render 'shared/flashes' %>
  <div id="pjax-container">
    <%= yield %>
  </div>
  <%= render 'shared/footer' %>

  <%= javascript_include_tag "https://maps.google.com/maps/api/js?key=******************************" %>
  <%= javascript_include_tag "https://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js" %>

  <%= javascript_include_tag "application" %>

  <%= yield(:after_js) %>
</body>

和我的地图列表/ index.html.erb所在的文件是这样的:

<div id="map" style="width: 100%; height: 300px;"></div>

<% content_for(:after_js) do %>
  <%= javascript_tag do %>

    $(document).on('ready', function() {
      handler = Gmaps.build('Google');
      handler.buildMap({ internal: { id: 'map' } }, function(){
        markers = handler.addMarkers(<%= raw @markers.to_json %>);
        handler.bounds.extendWith(markers);
        handler.fitMapToBounds();
      });
    })
  <% end %>
<% end %>

@markers是链接到列表的标记数组。它在清单控制器中定义,因此移动此javascript代码很困难。

此文件的JavaScript代码仅在我重新加载此特定页面时起作用,并且在我更改页面时它不会消失。

所以我的问题是: 是否可以使用Pjax系统在特定页面上调用包含某些ruby信息的JavaScript代码?

2 个答案:

答案 0 :(得分:1)

只需在pjax的成功函数中加载你的javascript。

答案 1 :(得分:0)

好的,我会解释更多有关解决方案的信息。 :)

在PJAX中,大部分时间它都没有加载包含在pjax函数外部的Jquery或js,但是相同。所以我们必须使用

将该js文件加载到pjax函数的成功函数中
  

$ getScript(&#39;你的js fle&#39;);

这样当pjax获取新的页面内容时,插件也会加载并包含。