ruby-on-rails – 用于Turbolinks Rails 5的浏览器后退按钮上的JQuery插件初始化

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 用于Turbolinks Rails 5的浏览器后退按钮上的JQuery插件初始化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是在浏览器后退按钮上初始化 jquery插件的更好的解决方案,不仅仅是在使用Rails 5中的turbolinks转换元素,如masterslider(照片库)或光滑(carousel),而不是像我下面那样重新加载页面
document.addEventListener 'turbolinks:load',->
  slickElementsPresent = $('.event-card').find('div.slick-slide')[0]
  if slickElementsPresent?
    window.location.reload();
  else
    $('.event-card').each ->
      $(@).not('.slick-initialized').slick {
        infinite: false,nextArrow: $(@).find('.event-more-details-button'),prevArrow: $(@).find('.event-card-slide-back-button')
      }

要清楚,我检查看看’turbolinks:load’是否有任何html元素只有在插件初始化时才会出现,如果是,那么刷新页面,因为即使元素在那里,插件也是没有初始化.然后我在所有具有我想要它的类的元素上初始化插件.

有些人在这里遇到了这个问题:https://github.com/turbolinks/turbolinks/issues/106有人指出

I just want to add for those having similar issues that making an initialization function idempotent is not necessarily the solution in some circumstances. Having done so with dataTables I am able to avoid duplicate elements. However,the cached versions of the elements on the page related to the plugin no longer function on a browser back click as it seems the plugin is not initialized in a cached page.

重新加载页面,如果插件已经更改了DOM,因为当有人按下后退按钮时从缓存中检索它似乎非常糟糕,但它是我提出的最好的,所以我转向世界寻求更多的想法!

更新:

所以一些jquery插件有很好的’undo’/’destroy’方法,如果是这样的话,最好在“turbolinks:before-cache”上添加一个事件监听器,然后像这样调用方法

document.addEventListener "turbolinks:before-cache",->
  $('.event-card').each ->
    $(@).slick('unslick');

但是有些jquery插件没有破坏函数或破坏实现此功能函数.就像masterslider有一个$(‘你的滑块元素’).masterslider(‘destroy’)函数,但它不会’撤消’它应用于你的html的javascript魔法,就像完全摆脱它一样,并且因此,当您从浏览器后退或前进按钮返回页面时,滑块根本不存在,因为它被触发的html元素已被破坏.这意味着对于某些插件,我仍然拥有的最佳答案是当他们所在的页面通过浏览器后退和前进按钮导航到页面时完全重新加载页面.

解决方法

因此,我提出了处理“恢复”访问的最佳答案(因为我已经学习了在turbolinks世界中调用浏览器后退和前进按钮访问),其中涉及没有“撤消”的jquery插件方法是简单地选择页面缓存.我通过抛出来实现这个:
<% if content_for?(:head) %>
  <%= yield(:head) %>
<% end %>

在< head>中我的application.html.erb文件的一部分,然后在页面的顶部我不希望turbolinks包含在它的缓存中,我把:

<% content_for :head do %>
  <Meta name="turbolinks-cache-control" content="no-cache">
<% end %>

这样,turbolinks从网络而不是缓存中获取页面,这是“恢复”访问的正常行为.只需要非常仔细地阅读文档,并弄清楚如何在rails中实现它并不是太糟糕.

猜你在找的Ruby相关文章