基础5升级:"图层必须是文档节点"

Dyl*_*lan 17 ruby-on-rails asset-pipeline zurb-foundation ruby-on-rails-4

我正在尝试将我的Ruby on Rails应用程序从Foundation 4升级到新发布的Foundation 5,并且CSS切换相对平稳.但是,我遇到了切换Javascript文件的问题.

当我切换Foundation.min.js和modernizr.js文件的Foundation 4版本然后重新加载页面时,我在控制台中得到了这个奇怪的JS错误:

Uncaught TypeError: Layer must be a document node foundation.js?body=1:35
  FastClick foundation.js?body=1:35
  FastClick.attach foundation.js?body=1:35
  (anonymous function) foundation.js?body=1:40
  (anonymous function)
Run Code Online (Sandbox Code Playgroud)

我甚至不知道FastClick做了什么,但它似乎包含在Foundation 5中,它正在阻止Foundation加载.反过来,这也导致我所有依赖于Foundation的JS都失败了.

任何帮助将不胜感激,谢谢!

fny*_*fny 25

更新:v5.0.3已发布,解决了此问题.请务必相应地更新您的foundation-rails宝石.

这是在合并到v5.0.3 的提交中解决的错误.这个修复程序只是在jQuery中包装了一个嵌入式库.您可以通过手动包含该版本直到v5.0.3发布来解决此问题.FastClick#ready()

通过将脚本移动到页面底部,您就放弃了Rails Turbolinks.Turbolinks要求JavaScript包含在内,<head />因为它会对<body />每个请求进行擦除.

这是怎么回事

Foundation不再等待DOM加载,而是立即执行.为了提高移动性能,Foundation 5嵌入FastClick了一个polyfill,可以消除具有触摸UI的浏览器上的点击延迟.执行后,基金会立即尝试附加FastClickdocument.body.如果基金会在初始化<head />,身体尚未存在:document.body将合理地返回null导致FastClick废弃其裤子.


pis*_*hio 9

确保两者都在<body>标签的末尾,而不是在标签的末尾<head>.

这会抛出错误:

<html>
<head>
</head>
    <script src="/static/js/modernizr.js"></script>
    <script src="/static/js/foundation.min.js"></script>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但这会起作用:

<html>
<head>
</head>
<body>
    <script src="/static/js/modernizr.js"></script>
    <script src="/static/js/foundation.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)