【问题标题】:Rails Coffeescript not executing properly at page loadRails Coffeescript 在页面加载时无法正确执行
【发布时间】:2014-11-07 07:08:03
【问题描述】:

我有一个以传统水平导航栏格式显示的导航栏菜单。对于小屏幕尺寸,我想使用 coffeescript 删除带有链接的 nav 元素,并将其附加到通过单击汉堡链接激活的下拉菜单中。

我遇到的麻烦是上述操作并不总是只执行大约 30% 的时间。这让我想知道是它的 Turbolinks 还是我对 coffeescript 的深沉noobish?代码如下。我这样做对吗?

(.small) 是我的 CSS 类,通过媒体查询隐藏在 768 以上的位置

ready = ->  

    $( window ).resize(menuAdjust)


    $('.hamburger').click ->
        $('#hidden').toggle(  )


menuAdjust = ->
 if ($(".small").css("display") == "block")
     $('#menu').appendTo('#hidden');
 else
     $('#menu').appendTo('#main')

$(document).ready(ready)
$(document).ready(menuAdjust)
$(document).on('page:load', ready)

【问题讨论】:

    标签: ruby-on-rails coffeescript turbolinks


    【解决方案1】:

    您的 CoffeeScript 代码只会在用户调整浏览器窗口大小时触发 menuAdjust,因为您只使用 ready() 回调而不是 'page:load' 事件注册了 menuAdjust。例如 menuAdjust 只会在整个页面刷新而不是 Turbolinks 页面加载时触发。注册 menuAdjust 也可以在 Turbolinks 页面加载事件上执行:

    $(document).on('page:load', menuAdjust)
    

    您也可以暂时disable Turbolinks 确定这是问题的原因。

    【讨论】: