【问题标题】:Rails Turbolinks - remove style before cachingRails Turbolinks - 在缓存之前删除样式
【发布时间】:2017-10-23 12:07:05
【问题描述】:

我有这个 div:

<div class="hidden" id="more-items">

如果点击事件发生,我会取消隐藏/隐藏:

<button type="button" onclick="showHide()">

通过:

@showHide = () ->
  $('div#more-items').toggleClass('hidden')
return

但问题是 div 应该在用户返回页面后关闭。如果他让它保持打开状态,它会在内容加载后保持打开状态 1 或 2 秒。不知道它在什么阶段关闭。

这没有帮助:

document.addEventListener 'turbolinks:before-cache', (e) ->
  $('div#more-items')[0].style.display = 'none'
return

还有这个:

document.addEventListener 'turbolinks:before-render', (e) ->
  e.data.newBody.getElementById('more-items').style.display = 'none'
return

【问题讨论】:

    标签: ajax ruby-on-rails-5 turbolinks


    【解决方案1】:

    我认为问题在于returns 的缩进。 Rails 资产管道将每个咖啡脚本文件包装在一个立即调用的函数表达式 (IIFE) 中,因此您编译的 JavaScript 如下所示:

    (function() {
      this.showHide = function() {
        return $('div#more-items').toggleClass('hidden');
      };
    
      return;
    
      document.addEventListener('turbolinks:before-cache', function(e) {
        return $('div#more-items')[0].style.display = 'none';
      });
    
      return;
    
    }).call(this);
    

    外部函数将提前return 并且您的turbolinks:before-cache 代码将永远不会运行。 CoffeeScript 自动返回最后一行。如果您想返回 undefined,请确保您的 return 与函数代码的缩进级别相同。

    将您的咖啡脚本更改为以下内容应该可以解决此问题:

    @showHide = () ->
      $('div#more-items').toggleClass('hidden')
    
    document.addEventListener 'turbolinks:before-cache', (e) ->
      $('div#more-items')[0].style.display = 'none'
    

    为了稍微整理一下,您还可以执行以下操作:

    HTML:

    <button type="button" id="toggle-more">
    

    CoffeeScript:

    $(document).on 'click', '#toggle-more', ->
      $('#more-items').toggleClass('hidden')
    
    $(document).on 'turbolinks:before-cache', ->
      $('#more-items').addClass('hidden')
    

    【讨论】:

    • 谢谢,不错的帖子,但遗憾的是我试过了。我使用内联侦听器,因为您可以在下面的链接中找到,Turbolink 缓存丢弃来自 js 的侦听器 - stackoverflow.com/questions/46881883/…
    • Turbolinks 不会丢弃文档上的侦听器,只会丢弃正文(及其子对象)。我已经在一个新的 Rails 应用程序中对此进行了测试,并且可以确认它可以工作:)
    • 啊,这就是为什么...谢谢!
    猜你喜欢
    • 2018-04-15
    • 2018-04-03
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2013-06-10
    • 2012-09-21
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多